انجمنهای فارسی اوبونتو
کمک و پشتیبانی => انجمن عمومی => نویسنده: abdossamad2003 در 17 اردیبهشت 1400، 03:50 بظ
-
با سلام خدمت دوستان
من شروع به یادگیری فرترن کردم ولی احساس می کنم gfortran در محاسبات اشتباه می کند مثلا ساده ترین محاسبه مانند sin(30.1)
program test
implicit none
real a
real(16) b
a = 30.1
b = 30.1
print*, sin(a), sin(b)
end program test
بعد از کامپایل کردن با gfortran و نتیجه:
[samad@localhost test]$ gfortran test1.f95 -o test1 && ./test1
-0.967696011 -0.967696035957813552903034493563998654
حالا بیاید با ماشین حساب یا برنامه libreoffice cal سینوس ۳۰/۱ را محاسبه کنیم. نتیجه
-0.967696132133805
مشخص است که از رقم ۷ به بعد کاملا متفاوت است یعنی gfortran اشتباه محاسبه می کند؟!
-
لینک (https://en.wikipedia.org/wiki/Floating-point_error_mitigation)
-
با سلام میشه خلاصه بگید چیکار کنم این متن های طولانی گیج کننده است
-
کار خاصی نیاز نیست بکنید.
-
توضیحات شما مناسب نبود این متن های طولانی در اینترنت فراوان است اگر کسی می دونه مشکل کجاست کمک کنه
اگر منظورتان خطای گرد کردن باشد این خطای گرد کردن نیست این یک نتیجه متفاوت است.
-
از دوستان کسی هست کمک کنه؟
-
این روش محاسبهٔ رایانهاست. شما نمیتونید کاریش بکنید.
-
این که نمیشه کاریش کرد درسته. ولی یه سوال دارم الگوریتم جی فرترن واسه محاسبه سینوس متفاوته یا مقدار حافظهای که به متغیر تخصیص میده یا کلا جریان چیز دیگهای است که باعث این تفاوت میشه؟ البته بیشتر به نظر میاد الگوریتم متفاوتی داره. من با پایتون و چندتای دیگه مقایسه کردم همهشون تقریبا یکی بودن و جیفرترن تفاوت داشت.
-
با تشکر مشکل من اینه که جی فرترن داره اشتباه محاسبه می کنه این یک باگ نیست یک اشتباه محاسباتی است دوستانی که کامپایلر اینتل دارند نتیجه رو مقایسه کنند
-
برای اعداد ممیز شناور این چیزا هستن مثلا توی پایتون هم حاصل مقدار زیر برابر False هستش:
(1.3 - 1.0) == 0.3
دلیلش هم واضحه چون مبنای سیستم ها مبنای 2 هستش حالا هر کامپایلر میاد رویکرد متفاوتی رو انتخاب می کنه که به نظرش بهتره
برای اینکه شهود بهتری هم داشته باشید اینطور فکر کنید که مثلا ما توی مبنای 10 نمیتونیم حاصل 1/3 رو با مقدار محدودی رقم بنویسیم در حالی که توی مبنای 3 به راحتی نوشته میشه
توضیحات شما مناسب نبود این متن های طولانی در اینترنت فراوان است
خب شاید همین دلیل خوبی باشه که شما یاد بگیرید چطور بخونیدشون
-
help جی فرترن کجاست؟ و چگونه میشه ازش استفاده کرد؟
با تشکر