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

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

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


ارائه ۲۴٫۱۰ اوبونتو منتشر شد 🎉

نویسنده موضوع: دقت کمپایلر یا دقت پردازنده!  (دفعات بازدید: 874 بار)

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

آفلاین ahmadubuntu

  • Full Member
  • *
  • ارسال: 240
  • جنسیت : پسر
    • ahmadubuntu.ir
دقت کمپایلر یا دقت پردازنده!
« : 29 آبان 1393، 11:47 ق‌ظ »
با سلام
من یک سری عدد بین یک تا 50 نیاز داشتم که فاصلشون 0.1 باشه به همین خاطر یک کد فرترن ساده نوشتم که این اعداد رو تولید کنه:
program one
implicit none
real::j
j=1.0
do
    write(*,*)j
    j=j+0.1
    if (j.gt.50) exit
end do

end program one

ولی با کمال تعجب خروجی برنامه دقت خیلی پایینی داشت:

   1.000000
   1.100000
   1.200000
   1.300000
   1.400000
   1.500000
   1.600000
   1.700000
   1.800000
   1.900000
   2.000000
   2.100000
   2.200000
   2.300000
   2.400000
   2.500000
   2.600000
   2.700000
   2.799999
   2.899999
   2.999999
   3.099999
   3.199999
   3.299999
   3.399999
   3.499999
   3.599999
   3.699999
   3.799999
   3.899998
   3.999998
   4.099998
   4.199998
   4.299998
   4.399998
   4.499998
   4.599998
   4.699998
   4.799998
   4.899998
   4.999998
   5.099998
   5.199997
   5.299997
   5.399997
   5.499997
   5.599997
   5.699997
   5.799997
   5.899997
   5.999997
   6.099997
   6.199996
   6.299996
   6.399996
   6.499996
   6.599996
   6.699996

البته کل خروجی رو نذاشتم ولی خب مشت نمونه خرواره!
من این کد رو هم با کمپایلر gfortran و هم با ifort کمپایل کردم!
هم روی لپتاپ خودم و هم روی یک سیستم 24 هسته ای با سی پی یو زیر کمپایل کردم ولی بازم همین ایراد رو داشت:
 Intel(R) Xeon(R) CPU           X5660  @ 2.80GHz
واقعا برام عجیب بود که یک کد به این سادگی (که فقط یک جمع توش داره) با دقت مناسبی اجرا نمیشه.
از دوستان کسی در این زمینه نظری نداره؟
« آخرین ویرایش: 29 آبان 1393، 11:54 ق‌ظ توسط ahmadubuntu »

آفلاین ahmadubuntu

  • Full Member
  • *
  • ارسال: 240
  • جنسیت : پسر
    • ahmadubuntu.ir
پاسخ : دقت کمپایلر یا دقت پردازنده!
« پاسخ #1 : 29 آبان 1393، 03:14 ب‌ظ »
با استفاده از r8- در آپشنهای ifort مشکلم حل شد:

ifort -r8 numgen.f90
یعنی دقت نویسنده کد هم مهمه ;-)