انجمن‌های فارسی اوبونتو

کمک و پشتیبانی => انجمن عمومی => نویسنده: abdossamad2003 در 17 اردیبهشت 1400، 03:50 ب‌ظ

عنوان: gfortran در لینوکس
ارسال شده توسط: 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 اشتباه محاسبه می کند؟!
عنوان: پاسخ : gfortran در لینوکس
ارسال شده توسط: nixoeen در 17 اردیبهشت 1400، 04:02 ب‌ظ
لینک (https://en.wikipedia.org/wiki/Floating-point_error_mitigation)
عنوان: پاسخ : gfortran در لینوکس
ارسال شده توسط: abdossamad2003 در 17 اردیبهشت 1400، 04:10 ب‌ظ
با سلام میشه خلاصه بگید چیکار کنم این متن های طولانی گیج کننده است
عنوان: پاسخ : gfortran در لینوکس
ارسال شده توسط: nixoeen در 17 اردیبهشت 1400، 05:23 ب‌ظ
کار خاصی نیاز نیست بکنید.
عنوان: پاسخ : gfortran در لینوکس
ارسال شده توسط: abdossamad2003 در 17 اردیبهشت 1400، 05:44 ب‌ظ
توضیحات شما مناسب نبود این متن های طولانی در اینترنت فراوان است اگر کسی می دونه مشکل کجاست کمک کنه
اگر منظورتان خطای گرد کردن باشد این خطای گرد کردن نیست این یک نتیجه متفاوت است.
عنوان: پاسخ : gfortran در لینوکس
ارسال شده توسط: abdossamad2003 در 17 اردیبهشت 1400، 10:16 ب‌ظ
از دوستان کسی هست کمک کنه؟
عنوان: پاسخ : gfortran در لینوکس
ارسال شده توسط: دانیال بهزادی در 18 اردیبهشت 1400، 11:49 ق‌ظ
این روش محاسبهٔ رایانه‌است. شما نمی‌تونید کاریش بکنید.
عنوان: پاسخ : gfortran در لینوکس
ارسال شده توسط: مجتبی باغبان در 18 اردیبهشت 1400، 04:59 ب‌ظ
این که نمیشه کاریش کرد درسته. ولی یه سوال دارم الگوریتم جی فرترن واسه محاسبه سینوس متفاوته یا مقدار حافظه‌ای که به متغیر تخصیص میده یا کلا جریان چیز دیگه‌ای است که باعث این تفاوت میشه؟ البته بیشتر به نظر میاد الگوریتم متفاوتی داره. من با پایتون و چندتای دیگه مقایسه کردم همه‌شون تقریبا یکی بودن و جی‌فرترن تفاوت داشت.
عنوان: پاسخ : gfortran در لینوکس
ارسال شده توسط: abdossamad2003 در 18 اردیبهشت 1400، 10:23 ب‌ظ
با تشکر مشکل من اینه که جی فرترن داره اشتباه محاسبه می کنه این یک باگ نیست یک اشتباه محاسباتی است دوستانی که کامپایلر اینتل دارند نتیجه رو مقایسه کنند
عنوان: پاسخ : gfortran در لینوکس
ارسال شده توسط: مرتضی . م در 19 اردیبهشت 1400، 11:09 ب‌ظ
برای اعداد ممیز شناور این چیزا هستن مثلا توی پایتون هم حاصل مقدار زیر برابر False هستش:
(1.3 - 1.0) == 0.3
دلیلش هم واضحه چون مبنای سیستم ها مبنای 2 هستش حالا هر کامپایلر میاد رویکرد متفاوتی رو انتخاب می کنه که به نظرش بهتره
برای اینکه شهود بهتری هم داشته باشید اینطور فکر کنید که مثلا ما توی مبنای 10 نمیتونیم حاصل 1/3 رو با مقدار محدودی رقم بنویسیم در حالی که توی مبنای 3 به راحتی نوشته میشه
توضیحات شما مناسب نبود این متن های طولانی در اینترنت فراوان است
خب شاید همین دلیل خوبی باشه که شما یاد بگیرید چطور بخونیدشون
عنوان: پاسخ : gfortran در لینوکس
ارسال شده توسط: abdossamad2003 در 20 اردیبهشت 1400، 11:58 ق‌ظ
help جی فرترن کجاست؟ و چگونه میشه ازش استفاده کرد؟
با تشکر