با سلام خواستم دز برنامه ی زیر کمکم کنید:
برنامه ای بنویسید که در آن دقت دو نوع اعشاری float و double با هم مقایسه شوند
تو کتابی که می خوندم تفاوتشون رو نگفته و این تمرین رو تو یه فرومی بود دیدم بلدش نیستم گفتم کمک بگیرم.
خیلی ممنون
بــــدرود
اعداد float و double هر دو یک نوع داده اعشاری با ممیز شناور هستند، یعنی می توانند یک عدد اعشاری را با
تقریب خوبی نگهداری کنند، فرق ایندو نوع داده در حجم حافظه ای که اشغال می کنند و محدوده بازه عددی آنها است،
اعداد float چهار بایت حافظه اشغال می کنند در حالی که double هشت بایت، به همین دلیل double می تونه
اعدادی با اندازه های خیلی بزرگتر و خیلی کوچکتر از float را با دقت اعشاری بیشتری نگه داری کنه.
ممیز اعشاری همیشه دقت اعشاری مناسبی نداره و ممکنه در محاسبات خطاهای کوچیکی داشته باشه.
دقت اعشاری وقتی خودشو نشون میده که تعداد ارقام بدون در نظر گرفتن صفر های دو طرف اش زیاد باشند،
مثلا ذخیره کردن 0.0000001 یا 10000000 دقت اعشاری زیادی نمی خواد اما ذخیره کردن 123.4567890123456789
دقت اعشاری زیادی می خواد. می توانید از کسر هایی استفاده کنید که تعداد ارقام شون نامتناهی است، مثلا
کسر 997 / 1 که تقریبا 0.00100300902708124373119358074223 است و همیشه برای ذخیره کردن رقم هایش
دقت کم می آورید.
اگر 997 تا کسر 997 / 1 را با هم جمع کنید باید به عدد 1 برسید، اما چون دقت اعشاری تخمینی است به یک عدد
اعشاری نزدیک به 1 می رسید که دقت اعشاری متغیر را بخوبی مشخص می کند :
کد:
#include <iostream.h>
#include <iomanip.h>
int main()
{
float f = 0, x = 1.0 / 997.0;
double d = 0, y = 1.0 / 997.0;
int i;
for (i = 0; i < 997; i++)
{
f += x;
d += y;
}
cout << "1 = float " << setprecision(20) << f << endl;
cout << "1 = double " << d << endl;
getch();
return 0;
}
نمونه خروجی در دو کامپایلر مختلف، double به 1 نزدیکتره چون دقت اعشاری بیشتری داره :
کد:
1 = float 1.0000064373016357
1 = double 1.0000000000000149
کد:
1 = float 1.0000064373016357422
1 = double 1.000000000000014877