من می خوام اعدادی را در c++ ذخیره کنم که مقدارشون بیشتر از مقدار مجاز هست. چه طور میتونم این کار را بکنم.
من خیلی c++ بلد نیستم.
با آرایه ها می تونم.؟( اعداد اعشاری هستند.)
farhadnia
ارسال شده: پنجشنبه، ۰۵ دی ۱۳۸۷
کاربر علاقهمند
عضو شده: سه شنبه، ۱۱ فروردین ۱۳۸۳
ارسالها: 41
موقعیت: خرم آباد
وضعیت: حاضر نیست
برای اعداد خیلی بزرگ باید از آرایه استفاده کنی و یه کلاس جدید برای کار با اون بنویسی البته قبلا دیگران نوشتن و فقط باید رو نت یه سرچ بزنی اگه اشتباه نکنم توی کتاب طراحی الگوریتم نیپولیتان - نعیمی پور فصل دوم یه مبحث کامل در مورد کار بر روی اعداد بزرگ و همینطور عملگر های مربوط به اونا رو داره زمان دانشجویی اون الگوریتم ها رو پیاده کردن اگه پیداشون کردم برات اینجا می زارم برشون داری ولی یادمه زیاد کار سختی نبود خصوصا برای جمع و تفریقشون یه مقدار فقط تقسیم اذیت می کنه...
مهمان
ارسال شده: جمعه، ۰۶ دی ۱۳۸۷
میشه بیشتر توضیح بدید. من چیزی از کلاس نمی دونم . همین طور میشه بگید.
farhadnia
ارسال شده: جمعه، ۰۶ دی ۱۳۸۷
کاربر علاقهمند
عضو شده: سه شنبه، ۱۱ فروردین ۱۳۸۳
ارسالها: 41
موقعیت: خرم آباد
وضعیت: حاضر نیست
ببین برای شروع الگوریتم جمع دو عدد که خیلی سادست رو بنویس چطوری اینطوری که می گم:
دو آرایه داری که عدد اول و عدد دوم توش ذخیره شده حالا تو می خوای حاصل جمع این دو عدد رو بدست بیاری الگوریتم جمع اعداد می گه که اگه حاصل جمع دو رقم کوچکتر از مبنای عدد شد که هیچ در غیر این صورت یک واحد به رقم مابعد اضافه می شه یعنی در مبنای 10 اگه داشتی 5 +4 = 9 که هیچ ولی اگه داشتی 6+7=13 عدد 3 رو در خانه متناظر در آرایه حاصل جمع می ریزی و یک عدد یک با خانه بعدی جمع می زنی:
5| 6| 2|3 |4 |7 |1 |0 |0
2 |5|1 |2 |5 |2 |0 |0 |0
----------------------------
7 |1|4 | ....
امیدوارم متوجه شده باشی با یک حلقه for راحت نوشته میشه...
در مثال زیر عدد اول در آرایه x و عدد دوم در آرایه y و حاصل جمع در آرایه z ذخیره شده
اين را من متوجه نشدم كه چه طور مي تونم يه عدد اعشاري مثل .00000000000000000000000000000000000007 را زخيره كنم
من مي خوام ضربشون كنم.
مهمان
ارسال شده: شنبه، ۰۷ دی ۱۳۸۷
اين را من متوجه نشدم كه چه طور مي تونم يه عدد اعشاري مثل .00000000000000000000000000000000000007 را زخيره كنم
من مي خوام ضربشون كنم.
مهمان
ارسال شده: شنبه، ۰۷ دی ۱۳۸۷
منظورم عددي هست كه تو flot يا چيز ديگه جا نشه.
ahmad598
ارسال شده: یكشنبه، ۰۸ دی ۱۳۸۷
کاربر فعال
عضو شده: جمعه، ۲۹ شهریور ۱۳۸۷
ارسالها: 59
وضعیت: حاضر نیست
فرقی نداره، اگر بتونید الگوریتم لازم برای ذخیره سازی اعداد صحیح (یا طبیعی) رو بنویسید، می تونید خیلی راحت اون رو به اعداد اعشاری هم تعمیم بدید. مثلا یه تعمیمی که به ذهن من می رسه اینه: اگر توی یه خونه از آرایه مقدار -1 قرار گرفته بود، یعنی در این مرنبه ممیز داریم. مثلا آرایه :
کد:
1
4
0
-1
0
8
برابره با عدد 140.08
خود متغیر نوع float هم تا اون جایی که من می دونم از یه ایده شبیه به همین استفاده می کنه.
farhadnia
ارسال شده: یكشنبه، ۰۸ دی ۱۳۸۷
کاربر علاقهمند
عضو شده: سه شنبه، ۱۱ فروردین ۱۳۸۳
ارسالها: 41
موقعیت: خرم آباد
وضعیت: حاضر نیست
نقل:
خود متغیر نوع float هم تا اون جایی که من می دونم از یه ایده شبیه به همین استفاده می کنه.
این جمله درست نیست...
در کامپیوتر اعداد اعشاری به فرم علمی ذخیره میشن یعنی فقط توان و مانتیس اعداد نگهداری میشه مثلا برای عدد 123.12369- عدد 3+ بعنوان توان و عدد 12312369- هم به عنوان مانتیس ذخیره میشه پایه هم که معلومه در اینجا پایه 10 هستش ولی برای محاسبات درون پردازنده پایه می تواند 2 یا 16 باشد...
برای محاسبات و این نوع نگهداری اعداد اعشاری در کامپیوتر می باشد البته استاندارد هایی برای این مورد وجود دارد مثل IEEE754 البته این استاندارد ها در جزئیات با هم اختلاف دارن و کلیت موضوع همینه یعنی ما فقط مانتیس و نما رو برای اعداد اعشاری ذخیره می کنیم این ادرس هم بد نیست نگاه کنی...
http://steve.hollasch.net/cgindex/coding/ieeefloat.html
برای ضرب اعداد اعشاری بزرگ هم الگوریتم های مختلفی وجود داره شما باید برای کار با اعداد خیلی بزرگ ابتدا الگوریتم جمع و تفریق رو بنویسی و بعد با استفاده از این دو الگوریتم عملیات ضرب و تقسیم رو هم شبیه سازی کنی البته با یه جستجو در اینترنت می تونی الگوریتم های فوقالعاده سریعی پیدا کنی که کف برت می کنه...
آخرین ویرایش توسط farhadnia در سه شنبه، ۱۰ دی ۱۳۸۷; به تعداد 2 بار ویرایش شده است
مهمان
ارسال شده: سه شنبه، ۱۰ دی ۱۳۸۷
من نمیدونم تو گوگل باید چی جست وجو کنم تا نتیجه درست را بده.
مهمان
ارسال شده: پنجشنبه، ۱۲ دی ۱۳۸۷
کسی سورس این را نداره این جا بزاره . واجبه.
kakilik
ارسال شده: یكشنبه، ۲۰ بهمن ۱۳۸۷
ناظر انجمن
عضو شده: پنجشنبه، ۲۶ شهریور ۱۳۸۳
ارسالها: 514
موقعیت: ترکمنصحرا
وضعیت: حاضر نیست
عضو شده: پنجشنبه، ۲۶ شهریور ۱۳۸۳
ارسالها: 514
موقعیت: ترکمنصحرا
وضعیت: حاضر نیست
یکی از فصلهای کتاب numerical recipes (قابل دانلود از www.nr.com) به این موضوع میپردازد و نحوهی پیادهسازی چهار عمل اصلی روی آن را (که بسیار کارا و سریع باشد) شرح میدهد و در نهایت با یک برنامه عدد پی را تا چندهزار رقم حساب میکند.
Linux is a registered trade mark of Linus Torvalds.
تمامی مطالب و مقالات این سایت تحت مجوز GNU FDL قرار دارند. بنابراین کپی و ایجاد تغییر در آنها مطابق شرایط این مجوز آزاد میباشد. یک نسخه از این مجوز را اینجا میتوانید برای خود دریافت نمایید.