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

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید




نویسنده موضوع: gfortran در لینوکس  (دفعات بازدید: 631 بار)

0 کاربر و 4 مهمان درحال مشاهده موضوع.

آفلاین abdossamad2003

  • Full Member
  • *
  • ارسال: 157
gfortran در لینوکس
« : 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 اشتباه محاسبه می کند؟!

آفلاین nixoeen

  • ناظر انجمن
  • *
  • ارسال: 4854
  • جنسیت : پسر
  • masoft قدیم
پاسخ : gfortran در لینوکس
« پاسخ #1 : 17 اردیبهشت 1400، 04:02 ب‌ظ »

آفلاین abdossamad2003

  • Full Member
  • *
  • ارسال: 157
پاسخ : gfortran در لینوکس
« پاسخ #2 : 17 اردیبهشت 1400، 04:10 ب‌ظ »
با سلام میشه خلاصه بگید چیکار کنم این متن های طولانی گیج کننده است

آفلاین nixoeen

  • ناظر انجمن
  • *
  • ارسال: 4854
  • جنسیت : پسر
  • masoft قدیم
پاسخ : gfortran در لینوکس
« پاسخ #3 : 17 اردیبهشت 1400، 05:23 ب‌ظ »
کار خاصی نیاز نیست بکنید.

آفلاین abdossamad2003

  • Full Member
  • *
  • ارسال: 157
پاسخ : gfortran در لینوکس
« پاسخ #4 : 17 اردیبهشت 1400، 05:44 ب‌ظ »
توضیحات شما مناسب نبود این متن های طولانی در اینترنت فراوان است اگر کسی می دونه مشکل کجاست کمک کنه
اگر منظورتان خطای گرد کردن باشد این خطای گرد کردن نیست این یک نتیجه متفاوت است.

آفلاین abdossamad2003

  • Full Member
  • *
  • ارسال: 157
پاسخ : gfortran در لینوکس
« پاسخ #5 : 17 اردیبهشت 1400، 10:16 ب‌ظ »
از دوستان کسی هست کمک کنه؟

آفلاین دانیال بهزادی

  • ناظر انجمن
  • *
  • ارسال: 19688
  • جنسیت : پسر
  • Urahara Kiesuke
    • وبلاگ
پاسخ : gfortran در لینوکس
« پاسخ #6 : 18 اردیبهشت 1400، 11:49 ق‌ظ »
این روش محاسبهٔ رایانه‌است. شما نمی‌تونید کاریش بکنید.
اگه این ارسال بهت کمک کرد، دنبال دکمهٔ تشکر نگرد. به جاش تو هم به جامعهٔ آزادت کمک کن

آفلاین مجتبی باغبان

  • Hero Member
  • *
  • ارسال: 780
  • جنسیت : پسر
پاسخ : gfortran در لینوکس
« پاسخ #7 : 18 اردیبهشت 1400، 04:59 ب‌ظ »
این که نمیشه کاریش کرد درسته. ولی یه سوال دارم الگوریتم جی فرترن واسه محاسبه سینوس متفاوته یا مقدار حافظه‌ای که به متغیر تخصیص میده یا کلا جریان چیز دیگه‌ای است که باعث این تفاوت میشه؟ البته بیشتر به نظر میاد الگوریتم متفاوتی داره. من با پایتون و چندتای دیگه مقایسه کردم همه‌شون تقریبا یکی بودن و جی‌فرترن تفاوت داشت.

آفلاین abdossamad2003

  • Full Member
  • *
  • ارسال: 157
پاسخ : gfortran در لینوکس
« پاسخ #8 : 18 اردیبهشت 1400، 10:23 ب‌ظ »
با تشکر مشکل من اینه که جی فرترن داره اشتباه محاسبه می کنه این یک باگ نیست یک اشتباه محاسباتی است دوستانی که کامپایلر اینتل دارند نتیجه رو مقایسه کنند

آفلاین مرتضی . م

  • High Hero Member
  • *
  • ارسال: 1116
پاسخ : gfortran در لینوکس
« پاسخ #9 : 19 اردیبهشت 1400، 11:09 ب‌ظ »
برای اعداد ممیز شناور این چیزا هستن مثلا توی پایتون هم حاصل مقدار زیر برابر False هستش:
(1.3 - 1.0) == 0.3
دلیلش هم واضحه چون مبنای سیستم ها مبنای 2 هستش حالا هر کامپایلر میاد رویکرد متفاوتی رو انتخاب می کنه که به نظرش بهتره
برای اینکه شهود بهتری هم داشته باشید اینطور فکر کنید که مثلا ما توی مبنای 10 نمیتونیم حاصل 1/3 رو با مقدار محدودی رقم بنویسیم در حالی که توی مبنای 3 به راحتی نوشته میشه
توضیحات شما مناسب نبود این متن های طولانی در اینترنت فراوان است
خب شاید همین دلیل خوبی باشه که شما یاد بگیرید چطور بخونیدشون

آفلاین abdossamad2003

  • Full Member
  • *
  • ارسال: 157
پاسخ : gfortran در لینوکس
« پاسخ #10 : 20 اردیبهشت 1400، 11:58 ق‌ظ »
help جی فرترن کجاست؟ و چگونه میشه ازش استفاده کرد؟
با تشکر
« آخرین ویرایش: 20 اردیبهشت 1400، 01:00 ب‌ظ توسط abdossamad2003 »