hsm215

متغیر float و double

hsm215 ۱۳۹۴/۰۸/۲۰ زبان برنامه‌نویسی جاوا

با سلام. اگر بخواهیم برنامه ای بنویسیم که مثلا متغیر های a=200.1 b=600.1 c=300.1 d=400.1  یک بار از نوع double و یک بار از نوع float تعریف کنیم چرا نتیجه ی a*b-c*d در این دو حالت با هم و هم چنین با نتیجه ی محاسبه دستی باهم متفاوت است؟

پاسخ‌ها به این تاپیک
نرگس اسدی
نرگس اسدی
۱۳۹۴/۰۸/۲۰
این مسئله برمی گرده به ارقام باینری که کامپیوتر برای ساخت یک عدد اعشاری از آن ها استفاده می کنه. ببینید شما وقتی به کامپیوتر عدد 100.1 را معرفی می کنید، کامپیوتر باید 15 رقم اعشار یا بیت برای این عدد قرار بده، اما اتفاقی که میافته اینه که به جای در نظر گرفتن عدد به صورت 100.100000000000000دقیقاً از این ارقام برای مشخص کردن عدد استفاده نمی کنه بلکه مثلاً عدد را به صورت 100.099999999999996 در نظر می گیره که خیلی به عدد اصلی نزدیکه و در حد 0.000000000000004 با عدد اصلی مدنظر ما اختلاف داره. مثل زمانی که مثلاً ساعت 10:44:12 است ولی اگر کسی از ما بپرسه ساعت چنده می گیم 10:45 یا یک ربع به یازده. به این مورد خطای گرد کردن یا roundoff error گفته میشه و در تمام زبان های برنامه نویسی وجود داره و ممکنه مقدار آن متفاوت باشه یا روی دستگاه های مختلف فرق کنه ولی تمام زبان ها از همین روش برای ذخیره ی اعداد اعشاری استفاده می کنن. پس اگر جواب محاسبه فرق می کنه دلیلش اینه که ارقام اعشاری که ما استفاده می کنیم با کامپیوتر فرق داره. اما توجه داشته باشید که این مقدار اینقدر کم هست که لازم نیست شما نگران خطای محاسبه باشید. در مورد تفاوت نوع double و float هم احتمالاً مقدار این خطا برای این دو نوع متفاوته.
hsm215
hsm215
۱۳۹۴/۰۸/۲۰
خیلی از پاسختون متشکرم.

در پاسخ به

ccc ccc
ccc ccc
۱۳۹۴/۰۸/۲۰
سلام. در مورد محاسبه دستی، شما باید اولویت عملگرها رو رعایت کنی. یعنی باید اول ضرب و انجام بدی بعد تفریق و. در مورد برنامش هم عدد صحیحش فرق نمی کنه. فقط فرقش و اعشاره که دلیلش واضحه.
hsm215
hsm215
۱۳۹۴/۰۸/۲۰
ممنون ولی منظور من هم فرق اعشار بود.دلیل فرق اعشار ،فرق در تعداد بیت های float و double هست؟

در پاسخ به