ورود

View Full Version : سوال: اعداد اعشاری محدوده نمایش اعداد در C++



rezaheidarida
سه شنبه 04 مهر 1391, 21:19 عصر
به جز float و double نوع داده اصلی دیگری برای نمایش اعداد اعشاری در C++‎ وجود دارد؟
محدوده ذخیره سازی این اعداد چیه؟
تعداد بیت ها ان ها در کامپایلرها ، سیستم عامل ها و معماری های مختلف فرق می کنه؟؟؟

Ananas
چهارشنبه 05 مهر 1391, 00:17 صبح
long double که 80 بیتی هست و حدودا 18 تا 20 رقم رو درست ثبت و محاسبه میکنه.

rezaheidarida
چهارشنبه 05 مهر 1391, 15:24 عصر
من الان حساب کردم با 80 بیت میشه یک عدد 25 رقمی را حساب کرد
من سوالم بیشتر در مورد مواردی هست که در نت دیدم
که گفته میشه
double 3.4 *10^308 ta 3.4*10^-308
یا کمی بیشتر یا کمتر
این تناقض از کجا میاد ؟ با اینکه در کامپایلر هم به نتایج مختلفی می رسم

Ananas
چهارشنبه 05 مهر 1391, 16:03 عصر
یا کمی بیشتر یا کمتر
این تناقض از کجا میاد ؟ با اینکه در کامپایلر هم به نتایج مختلفی می رسم کدوم تناقض؟ اگه منظورت یکی دو رقم بیشتر و کمتر هست بخاطر نوع عملیات ریاضی هست. مثلا ممکنه تو عمل جمع خطا با عمل سینوس متفاوت باشه (که مسلما هست) خطا تو گرفتن لگاریتم با خطا تو انجام ضرب ممکنه تعداد رقمش یکی دوتا بیشتر و کمتر بشه تازه اونم فرق داره که از چه اعدادی استفاده کنی. مثلا سینوس 0 رو بگیری یا سینوس pi ! که هر دو جوابشون 0 هست ولی ممکنه خطای خیلی خیلی کوچیک برای pi وجود داشته باشه. البته cpu ها هم فرق میکنن. ممکنه نتیجه ی محاسبات کمی متفاوت باشه. از طرفی یک نکته ماکزیمم تعداد ارقامی هست که از درستی محاسباتشون مطمئنیم و یک نکته بزرگی مقدار عدد هست که با توان 10 که به شکل نماد علمی عدد رو می نویسیم مشخص میشه.

double 3.4 *10^308 ta 3.4*10^-3083.4 شما تا 18 رقم دقت داره و از اون به بعد ممکنه خطا داشته باشه و عدد شما از نظر مقدار و بزرگی می تونه تا 10^308 پیش بره. یعنی توان 10 عدد تو محاسبات شما اگه از 308 بیشتر باشه در محاسبات با خطا مواجه میشید.