ايران ويج

نسخه‌ی کامل: !35 ؟؟؟؟
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
به اين كد نگاه كنيد

dim x as double

x=1
for i = 1 to 35
x=x*i
next i
msgbox x

ايا ميشه كاري كرد كه جواب دقيق اين كد يعني 35 فاكتوريل رو حساب كرد؟

Shy
for i=2 to 35
اينو بزاري درست ميشه
من ميگم جواب ميده ولي اينجوري 1.03331479663861E+40
من مي خام دقيق دقيق بده
متاسفانه باید بگم نمیشه ! در وی بی این بزرگترین نوع متغیر هست و در واقع تعداد بیت های بخش Mantissa در نوع Double محدود هست ( 52 بیت + 1 بیت ثابت که همیشه 1 هست ) لینک زیر عدد Double precision رو معرفی می کنه ( طبق استاندارد IEEE )

http://en.wikipedia.org/wiki/Double_precision

یک عدد از نوع Double precision بیشتر از این دقت نمایش نداره ! پس قابلیت نمایش دادن دقیق یک عدد بسیار بسیار بزرگی مثل فکتوریل 35 با همچین متغیری قابل انجام دادن نیست .
معمولا هیچ کدوم از نوع های موجود در زبان های سطح بالا قابلیت نمایش دقیق اعدادی به این بزرگی رو ندارند . اگه به همچین چیزی نیاز دارید باید از زبان سطح پایینی مثل اسمبلی کمک بگیری که محدود به داده ها و انواع اونها نیست . شما از کل حافظه میتونی استفاده کنی و یک عدد رو میتونی دقیق محاسبه کنی .

شما میتونی با شبیه سازی عمل ضرب(که خیلی کار بر هست) و گرفتن یه آرایه بجای محل خاص حافظه این کارو انجام بدی .
شبیه سازی رو میشه اینطوری انجام داد. مثلا ضرب عددهای 4259*3652 رو میشه اینطوری انجام داد
3652=3*1000+6*100+5*10+2
اینطوری عدد رو بجای چند رقمی میکنی تک رقمی (و عملی مثل 3*1000 رومیشه اینطوری گفت یه سه و ستا صفر جلوش)
بقیش با خودت.