PDA

View Full Version : سوال: متغیر اعداد خیلی خیلی بزرگ



arian021
جمعه 15 فروردین 1393, 18:43 عصر
سلام، دوستان من در برنامم با اعداد خیلی بزرگ کار می کنم. خودم از BigInteger استفاده کردم اما بزرگ تر از BigInteger می خوام. کسی میدونه چه جوری اعداد بزرگ تر رو نگه دارم ؟ ؟ ؟

sohil_ww
جمعه 15 فروردین 1393, 19:38 عصر
چند رقم می خوای نگه داری مگه ؟

NASA's Spaceman
جمعه 15 فروردین 1393, 19:46 عصر
احتمالا ایشون برا اعدا نجومی میگن وگرنه اعداد معمولی که تو متغیر ها جا میشن
با سپاس

arian021
جمعه 15 فروردین 1393, 19:49 عصر
مثلا عدد 1میلیون رقمی

alireza es
جمعه 15 فروردین 1393, 19:51 عصر
اگه قرار نیست ضربو تقسیم کنید میتونید اونارو داخل یه رشته بریزید.
به این صورت که مثلا یه BigInteger داشته باشید و هروقت پرشد بریزید داخل یه استرینگ.و خالیش کنید و بعدش بقیه اعداد
برای ضربو تقسیم کردن رشته هم راحل وجود داره ولی بهتر بود شما در صورت امکان بگین برای چه کاربردی میخواین تا بیشتر کمکتون بکنم

shahryari
جمعه 15 فروردین 1393, 19:55 عصر
یک ملیون رقمی رو باید در رشته ذخیره کنی
والا فک نکنم فیلد ها عددی جوابگو باشه

NASA's Spaceman
جمعه 15 فروردین 1393, 19:58 عصر
خب اگه بصورت رشته درشون بیاریم
پس چطور اون ها رو در هم ضرب کنیم و یا یه عملیات دیگه انجام بدیم؟
با سپاس

alireza es
جمعه 15 فروردین 1393, 20:08 عصر
یک ملیون رقمی رو باید در رشته ذخیره کنی
والا فک نکنم فیلد ها عددی جوابگو باشه

یه مساله دیگه هم هست.یک میلیون رقم رو نمیشه تو یک متغیر جا داد.مساله برمیگرده به حافظه رم.باید تو فایل ریخت(البته شایدم بشه ریخت تو رم که به حافظه رم مربوطه)

NASA's Spaceman
جمعه 15 فروردین 1393, 20:43 عصر
بفرما اینم سورسش
*****
http://barnamenevis.org/attachment.php?attachmentid=117610&d=1396628628
******
تشکر فراموش نشه
با سپاس

arian021
جمعه 15 فروردین 1393, 21:45 عصر
خب من چه جوری توی رم بریزم ؟؟ چون محاسبات روی عدد دارم !

NASA's Spaceman
جمعه 15 فروردین 1393, 22:02 عصر
نمی دونم تو رم چجوری میشه
ولی یه جا ذخیرش کنین یا setting ها و یا دیتابیس و هر جا که نیاز داشتین باید صداش بزنین تا بتونین روی اون عدد محاسباتتون و انجام بدین
فقط این برنامه مشکل سرعت داره
یعنی 100,000 فاکتوریل رو توی 3 ساعت انجام میده و این یکم زمان بر هست
که امیدوارم بتونمم مشکلش رو حل کنم
با سپاس

zayens
شنبه 16 فروردین 1393, 13:44 عصر
برای ذخیره و انجام اعمال ضرب و تقسیم و جمع روی اونها ( مثلا برای عدد 500 رقمی) آسونترین راه استفاده از آرایه هست
برای انجام عملیات مثل جمع و ضرب و ... هم باید خودت یه کلاس برا هر کدومش تعریف کنی

مثلا برای جمع:
اول سه تا آرایه تعریف کن با طول مثلا 500
عدد اول و دوم را توی آرایه اول و دوم بریز(هر ایندکس آرایه فقط یک رقم) و آرایه سوم هم برای result کنار بذار
حالا برای جمع باید آخرین عدد آرایه عدد اول را (آخرین ایندکس را) با آخرین عدد آرایه دوم جمع کنی و جمعشو بریزی توresult و با یه حلقه for بصورت تک تک این کار
را انجام بدی
فقط باید یادت باشه که هر آرایه فقط یه رقم میتونه نگه داره و در صورتی که حاصل 2 یا چند رقم بشه باید به ایندکسهای قبلتر هم حاصل را اضافه کنی(مشابه عمل جمعی که خودمون انجام میدیم)
...
کار جالبی بود که قبلا من انجامش داده بودم اما الان سورسشو ندارم که برات بذارم
ولی کار سختی هم نیست

NASA's Spaceman
شنبه 16 فروردین 1393, 18:06 عصر
دوست عزیز اون کدی که من گذاشتم هیچ محدودیتی نداره
با سپاس

arian021
شنبه 16 فروردین 1393, 19:33 عصر
برای ذخیره و انجام اعمال ضرب و تقسیم و جمع روی اونها ( مثلا برای عدد 500 رقمی) آسونترین راه استفاده از آرایه هست
برای انجام عملیات مثل جمع و ضرب و ... هم باید خودت یه کلاس برا هر کدومش تعریف کنی

مثلا برای جمع:
اول سه تا آرایه تعریف کن با طول مثلا 500
عدد اول و دوم را توی آرایه اول و دوم بریز(هر ایندکس آرایه فقط یک رقم) و آرایه سوم هم برای result کنار بذار
حالا برای جمع باید آخرین عدد آرایه عدد اول را (آخرین ایندکس را) با آخرین عدد آرایه دوم جمع کنی و جمعشو بریزی توresult و با یه حلقه for بصورت تک تک این کار
را انجام بدی
فقط باید یادت باشه که هر آرایه فقط یه رقم میتونه نگه داره و در صورتی که حاصل 2 یا چند رقم بشه باید به ایندکسهای قبلتر هم حاصل را اضافه کنی(مشابه عمل جمعی که خودمون انجام میدیم)
...
کار جالبی بود که قبلا من انجامش داده بودم اما الان سورسشو ندارم که برات بذارم
ولی کار سختی هم نیست

خب نوع آرایه باید چی باشه ؟

sagggad
شنبه 16 فروردین 1393, 19:45 عصر
سلام
به نظر من میشه روی هارد هم قرار داد
یعنی شما عدد رو در یه فایل متنی ذخیره کنید
بعد هر وقت خواستید بخونید یا در اون بنویسید یا تغییرش بدید
البته شاید هم این کار زیاد منطقی نباشه

syntiberium
شنبه 16 فروردین 1393, 20:27 عصر
به نظر من میشه روی هارد هم قرار داد
یعنی شما عدد رو در یه فایل متنی ذخیره کنید
بعد هر وقت خواستید بخونید یا در اون بنویسید یا تغییرش بدید

چرا روی هارد ذخیره کنیم ؟ یه آرایه ی یک میلیونی از بایت 1 مگابایت جا می گیره و کامپیوتر های امروزی حداقل 2 گیگ رم دارند .
محاسبات ریاضی رو هم همونطور توی مدرسه روی کاغذ انجام می دادی باید سعی کنی برنامشو بسازی .

sagggad
شنبه 16 فروردین 1393, 20:30 عصر
چرا روی هارد ذخیره کنیم ؟ یه آرایه ی یک میلیونی از بایت 1 مگابایت جا می گیره و کامپیوتر های امروزی حداقل 2 گیگ رم دارند .
محاسبات ریاضی رو هم همونطور توی مدرسه روی کاغذ انجام می دادی باید سعی کنی برنامشو بسازی .
من هم عرض کردم :
این هم یک راه هستش .
به محاسبات مدرسه چه ارتباطی داره ؟؟ :گیج:

NASA's Spaceman
شنبه 16 فروردین 1393, 20:33 عصر
دوستان تو همین تاپیک یکم برین بالاتر لینک دانلود گذاشتم و خودم نوشتمش دانلود کنید
خودتون ببینید و تازه محدودیت هم نداره ولی اینایی که شما میگن محدودیت حساب کردن داره
با سپاس

us1234
شنبه 16 فروردین 1393, 20:37 عصر
به محاسبات مدرسه چه ارتباطی داره ؟؟ :گیج:

وقتی یک عدد تبدیل به رشته یا آرایه بشه دیگه نمیتونید به سادگی یک عمل مثل جمع را انجام بدید . در این تاپیک هم قبلا ذکر شده بود . من برای شما توضیح ساده میدم
مثلا برای جمع . درایه اول یک آرایه را با درایه متناظرش جمع میکنید اگر حاصل از 9 بیشتر شد باقیمانده اش را بر 10 میگیری و به درایه بعدی جمع میکنید . این عمل را از سمت راست به چپ تا رسیدن به درایه اول ارایه باید انجام بدید.

arian021
شنبه 16 فروردین 1393, 21:08 عصر
دوستان میشه یه مثال با آرایه بزنید ؟
من نمیفهمم:گریه:

alireza es
شنبه 16 فروردین 1393, 22:44 عصر
سوال من اینه که چرا این عملیات سنگین رو تو C# انجام میدی که کاملا به ضرره؟انجام این محاسبات تو حتی تو C++ هم کار خوبی نیست و باید تو اسمبلی نوشت
چه برسه به C#

NASA's Spaceman
شنبه 16 فروردین 1393, 23:04 عصر
البته اگه با نسخه 2013 بنویسی مشکلت خیلی کمتر میشه و سریع تر اجرا میشه ولی خداییش خودتون قضاوت کنین مثلا برا 5000 فاکتوریل که یه بار و یا دو بار نمیخواد کد رو اجرا کنه بلکه باید 16 هزار بار این کد رو اجرا کنه تا جواب رو بدست بیاره و سازمان هایی که با چنین اعدادی سر و کار دارن از ابر کامپیوتر ها استفاده میکنن که بیش از 100 تا cpu بعضی هاشون دارن و جواب 100,000 فاکتوریل که کامپیوتر های ما توی سه ساعت و 20 دقیقه جوابش رو بدست میارن و توی کسری از ثانیه جواب میدن و اگه پروژه برا جایی مینویسین بهتره ببینین از چه نوع کامپیوتری دارن استفاده میکنن و براشون حداکثر عدد در نظر بگیرین و محاسبات سنگینشون رو توی چند تا برنامه جدا انجام بدین و در اخر این برنامه ها رو با هم مرتبط کنین چون با این کامپیوتر های شخصی(ریز کامپیوتر) ها به هیچ وجه نمیشه چنین کاری کرد
من این سه ساعت رو که گفتم روی یه لپ تاپ با بالاترین مشخصات ممکن Cpu:I7 Ram:8 انجام دادم
در کل انجام چنین محاسباتی برای ریز کامپیوتر ها کاملا کار اشتباهی هست
با سپاس

hadi0x7c7
یک شنبه 17 فروردین 1393, 00:07 صبح
جاوا کلاس Biginteger داره اون جواب میده، یه سوال شما این همه عدد رو میخوای چیکار؟؟ داری برنامه واسه ناسا مینویسی؟ یا از این مسئله های ACM هست؟

us1234
یک شنبه 17 فروردین 1393, 00:25 صبح
کامپیوتر های شخصی(ریز کامپیوتر) ها
کامپیوتر شخصی با ریز کامپیوتر متفاوت است .

اگه هدفت به نتیجه رسیدن کار هست و نه زبان بایستی عرض کنم که توی پی اچ پی به سادگی میشه با این اعداد و ارقام کار کرد و به دلیل استفاده از سرور های قوی زمان به نسبت کمتری برای انجام عملیات مشابه روی سیستم شخصی استفاده میکند. ولی تایم اوت پی اچ پی را باید بالا ببری که این قضیه روی هاست های اشتراکی امکان ندارد . برای توضیحات بیشتر به قسمت پی اچ پی مراجعه کنید

NASA's Spaceman
یک شنبه 17 فروردین 1393, 06:10 صبح
دوست عزیز ایشون میخوان با سی شارپ بنویسن نه PHP و بابت اشتباهم هم عذر میخوام
خودم متوجهش نشده بودم
و شما hadi0x7c7 (http://barnamenevis.org/member.php?248784-hadi0x7c7) محسبات ناسا با اعدادی هست که هیچ کدوم از ما تا به حال ندیدم و نخواهیم دید و تقریبا یه چیزی نزدیک به 30 تا ابر کامپیوتر با CPU های خیلی قوی و زیاد این کار رو میکنن
پس ما باید بی خیال چنین حساب هایی بشیم
خداییش یکم هم باید بفکر این CPU های امروزی بود که اتفاقی براشون نیفته
با سپاس

arian021
یک شنبه 17 فروردین 1393, 15:40 عصر
من نسا اینا رو چیکار دارم ؟؟ یکی به من بگه چه جوری یه عدد مثلا 1میلیون رقمی رو نگهدارم و روش محاسبات کنم ؟؟

NASA's Spaceman
یک شنبه 17 فروردین 1393, 16:28 عصر
چرا اینقدر بحث این تاپیک طولانی میکنی؟
اون مثال رو دانلود کن و مثل همون برنامت رو بساز اگه بجای تاپیک زدن روی اون تمذین کرده بودی الان بلد بودیش
با سپاس