متغیر float و double

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

پاسخ ها

sokanacademy forum
کاربر سکان آکادمی 8 سال پیش
سلام. در مورد محاسبه دستی، شما باید اولویت عملگرها رو رعایت کنی. یعنی باید اول ضرب و انجام بدی بعد تفریق و. در مورد برنامش هم عدد صحیحش فرق نمی کنه. فقط فرقش و اعشاره که دلیلش واضحه.
sokanacademy forum
کاربر سکان آکادمی 8 سال پیش
ممنون ولی منظور من هم فرق اعشار بود.دلیل فرق اعشار ،فرق در تعداد بیت های float و double هست؟
sokanacademy forum
کاربر سکان آکادمی 8 سال پیش
این مسئله برمی گرده به ارقام باینری که کامپیوتر برای ساخت یک عدد اعشاری از آن ها استفاده می کنه. ببینید شما وقتی به کامپیوتر عدد 100.1 را معرفی می کنید، کامپیوتر باید 15 رقم اعشار یا بیت برای این عدد قرار بده، اما اتفاقی که میافته اینه که به جای در نظر گرفتن عدد به صورت 100.100000000000000دقیقاً از این ارقام برای مشخص کردن عدد استفاده نمی کنه بلکه مثلاً عدد را به صورت 100.099999999999996 در نظر می گیره که خیلی به عدد اصلی نزدیکه و در حد 0.000000000000004 با عدد اصلی مدنظر ما اختلاف داره. مثل زمانی که مثلاً ساعت 10:44:12 است ولی اگر کسی از ما بپرسه ساعت چنده می گیم 10:45 یا یک ربع به یازده. به این مورد خطای گرد کردن یا roundoff error گفته میشه و در تمام زبان های برنامه نویسی وجود داره و ممکنه مقدار آن متفاوت باشه یا روی دستگاه های مختلف فرق کنه ولی تمام زبان ها از همین روش برای ذخیره ی اعداد اعشاری استفاده می کنن. پس اگر جواب محاسبه فرق می کنه دلیلش اینه که ارقام اعشاری که ما استفاده می کنیم با کامپیوتر فرق داره. اما توجه داشته باشید که این مقدار اینقدر کم هست که لازم نیست شما نگران خطای محاسبه باشید. در مورد تفاوت نوع double و float هم احتمالاً مقدار این خطا برای این دو نوع متفاوته.
sokanacademy forum
کاربر سکان آکادمی 8 سال پیش
خیلی از پاسختون متشکرم.
online-support-icon