محدودیت اعداد در c++

این بخش مربوط به برنامه نویسی تحت لینوکس میباشد.C,Perl,PHP,Python جاوا و... که می‌توانید سولات خود را اینجا مطرح نمایید. اگر هم کدهای برنامه ای دارید می‌توانید اینحا مطرح نمایید.

مدیران انجمن: mr_mohammad, ناظران انجمن

محدودیت اعداد در c++

پستتوسط مهمان » پنج شنبه 5 دی 1387, 8:02pm

من می خوام اعدادی را در c++ ذخیره کنم که مقدارشون بیشتر از مقدار مجاز هست. چه طور میتونم این کار را بکنم.

من خیلی c++ بلد نیستم.
با آرایه ها می تونم.؟( اعداد اعشاری هستند.)
مهمان
 

پاسخ: محدودیت اعداد در c++

پستتوسط farhadnia » جمعه 5 دی 1387, 1:10am

برای اعداد خیلی بزرگ باید از آرایه استفاده کنی و یه کلاس جدید برای کار با اون بنویسی البته قبلا دیگران نوشتن و فقط باید رو نت یه سرچ بزنی اگه اشتباه نکنم توی کتاب طراحی الگوریتم نیپولیتان - نعیمی پور فصل دوم یه مبحث کامل در مورد کار بر روی اعداد بزرگ و همینطور عملگر های مربوط به اونا رو داره زمان دانشجویی اون الگوریتم ها رو پیاده کردن اگه پیداشون کردم برات اینجا می زارم برشون داری ولی یادمه زیاد کار سختی نبود خصوصا برای جمع و تفریقشون یه مقدار فقط تقسیم اذیت می کنه...
farhadnia
کاربر جدید
کاربر جدید
 
پست ها : 41
تاریخ عضویت: سه شنبه 10 فروردین 1383, 3:40am
محل سکونت: خرم آباد

پاسخ: محدودیت اعداد در c++

پستتوسط مهمان » جمعه 6 دی 1387, 5:41pm

میشه بیشتر توضیح بدید. من چیزی از کلاس نمی دونم . همین طور میشه بگید.
مهمان
 

پاسخ: محدودیت اعداد در c++

پستتوسط farhadnia » جمعه 6 دی 1387, 11:05pm

ببین برای شروع الگوریتم جمع دو عدد که خیلی سادست رو بنویس چطوری اینطوری که می گم:
دو آرایه داری که عدد اول و عدد دوم توش ذخیره شده حالا تو می خوای حاصل جمع این دو عدد رو بدست بیاری الگوریتم جمع اعداد می گه که اگه حاصل جمع دو رقم کوچکتر از مبنای عدد شد که هیچ در غیر این صورت یک واحد به رقم مابعد اضافه می شه یعنی در مبنای 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 ذخیره شده



کد: انتخاب همه
carry=0;
for(i=n;i>=0;i--){
   temp=x[i]+y[i]+carry;
   if(temp>10){
      z[i]=temp%10;
      carry=1;
   }
   else{
      z[i]=temp;
      carry=0;
}
farhadnia
کاربر جدید
کاربر جدید
 
پست ها : 41
تاریخ عضویت: سه شنبه 10 فروردین 1383, 3:40am
محل سکونت: خرم آباد

پاسخ: محدودیت اعداد در c++

پستتوسط مهمان » شنبه 7 دی 1387, 2:05pm

اين را من متوجه نشدم كه چه طور مي تونم يه عدد اعشاري مثل .00000000000000000000000000000000000007 را زخيره كنم

من مي خوام ضربشون كنم.
مهمان
 

پاسخ: محدودیت اعداد در c++

پستتوسط مهمان » شنبه 7 دی 1387, 2:05pm

اين را من متوجه نشدم كه چه طور مي تونم يه عدد اعشاري مثل .00000000000000000000000000000000000007 را زخيره كنم

من مي خوام ضربشون كنم.
مهمان
 

پاسخ: محدودیت اعداد در c++

پستتوسط مهمان » شنبه 7 دی 1387, 2:16pm

منظورم عددي هست كه تو flot يا چيز ديگه جا نشه.
مهمان
 

پاسخ: محدودیت اعداد در c++

پستتوسط ahmad598 » یکشنبه 8 دی 1387, 12:06pm

فرقی نداره، اگر بتونید الگوریتم لازم برای ذخیره سازی اعداد صحیح (یا طبیعی) رو بنویسید، می تونید خیلی راحت اون رو به اعداد اعشاری هم تعمیم بدید. مثلا یه تعمیمی که به ذهن من می رسه اینه: اگر توی یه خونه از آرایه مقدار -1 قرار گرفته بود، یعنی در این مرنبه ممیز داریم. مثلا آرایه :
کد: انتخاب همه
1
4
0
-1
0
8

برابره با عدد 140.08
خود متغیر نوع float هم تا اون جایی که من می دونم از یه ایده شبیه به همین استفاده می کنه.
ahmad598
کاربر جدید
کاربر جدید
 
پست ها : 67
تاریخ عضویت: جمعه 28 شهریور 1387, 2:35am

پاسخ: محدودیت اعداد در c++

پستتوسط farhadnia » یکشنبه 8 دی 1387, 2:00pm

خود متغیر نوع float هم تا اون جایی که من می دونم از یه ایده شبیه به همین استفاده می کنه.

این جمله درست نیست...
در کامپیوتر اعداد اعشاری به فرم علمی ذخیره میشن یعنی فقط توان و مانتیس اعداد نگهداری میشه مثلا برای عدد 123.12369- عدد 3+ بعنوان توان و عدد 12312369- هم به عنوان مانتیس ذخیره میشه پایه هم که معلومه در اینجا پایه 10 هستش ولی برای محاسبات درون پردازنده پایه می تواند 2 یا 16 باشد...
برای محاسبات و این نوع نگهداری اعداد اعشاری در کامپیوتر می باشد البته استاندارد هایی برای این مورد وجود دارد مثل IEEE754 البته این استاندارد ها در جزئیات با هم اختلاف دارن و کلیت موضوع همینه یعنی ما فقط مانتیس و نما رو برای اعداد اعشاری ذخیره می کنیم این ادرس هم بد نیست نگاه کنی...
http://steve.hollasch.net/cgindex/coding/ieeefloat.html
برای ضرب اعداد اعشاری بزرگ هم الگوریتم های مختلفی وجود داره شما باید برای کار با اعداد خیلی بزرگ ابتدا الگوریتم جمع و تفریق رو بنویسی و بعد با استفاده از این دو الگوریتم عملیات ضرب و تقسیم رو هم شبیه سازی کنی البته با یه جستجو در اینترنت می تونی الگوریتم های فوقالعاده سریعی پیدا کنی که کف برت می کنه...
آخرین ویرایش توسط farhadnia on سه شنبه 10 دی 1387, 7:34pm, ویرایش شده در 2.
farhadnia
کاربر جدید
کاربر جدید
 
پست ها : 41
تاریخ عضویت: سه شنبه 10 فروردین 1383, 3:40am
محل سکونت: خرم آباد

پاسخ: محدودیت اعداد در c++

پستتوسط مهمان » سه شنبه 10 دی 1387, 12:13pm

من نمیدونم تو گوگل باید چی جست وجو کنم تا نتیجه درست را بده.
مهمان
 

پاسخ: محدودیت اعداد در c++

پستتوسط مهمان » پنج شنبه 12 دی 1387, 10:04pm

کسی سورس این را نداره این جا بزاره . واجبه.
مهمان
 

پاسخ: محدودیت اعداد در c++

پستتوسط kakilik » یکشنبه 20 بهمن 1387, 5:28pm

kakilik
مدیر انجمن
مدیر انجمن
 
پست ها : 596
تاریخ عضویت: پنج شنبه 26 شهریور 1383, 3:22pm
محل سکونت: ترکمن‌صحرا

پاسخ: محدودیت اعداد در c++

پستتوسط kakilik » جمعه 28 فروردین 1388, 11:44pm

یکی از فصل‌های کتاب numerical recipes (قابل دانلود از www.nr.com) به این موضوع می‌پردازد و نحوه‌ی پیاده‌سازی چهار عمل اصلی روی آن را (که بسیار کارا و سریع باشد) شرح می‌دهد و در نهایت با یک برنامه عدد پی را تا چندهزار رقم حساب می‌کند.
kakilik
مدیر انجمن
مدیر انجمن
 
پست ها : 596
تاریخ عضویت: پنج شنبه 26 شهریور 1383, 3:22pm
محل سکونت: ترکمن‌صحرا


بازگشت به لینوکس و برنامه نویسی

چه کسی حاضر است ؟

کاربران حاضر در این انجمن: Google [Bot] و 0 مهمان