[問題] 準確度問題

看板Fortran作者 (我不是好男人)時間15年前 (2009/11/09 01:02), 編輯推噓2(202)
留言4則, 3人參與, 最新討論串1/5 (看更多)
我們老師出一個作業 計算 2^3 2^5 2^7 2^9 2^49 1- ----- + ----- - ----- + ----- .... ------ 4! 6! 8! 10! 50! 這是我打的 implicit none integer::i,a,c real(kind=8)::ss,n,v a=1 do i=1,50 if(i/2*2/=i)n=2**i a=a*i if(i/2*2==i)then v=a c=c+1 ss=ss-(-1)**c*n/v write(*,*)c,ss endif enddo end 算出來的 1 1.00000000000000 2 0.666666666666667 3 0.711111111111111 4 0.707936507936508 5 0.708077601410935 6 0.708073325851104 7 0.708079731129053 8 0.708063381375117 9 0.707917491813515 10 0.708166899470330 11 0.704154863362005 12 0.714965674172816 13 0.696866126661503 14 0.794427102271259 15 1.17537948322364 16 0.175379483223640 17 NaN 18 NaN 19 NaN 20 NaN 21 NaN 22 NaN 23 NaN 24 NaN 25 NaN 好像算到第10項就錯了, 請問我應該怎麼修改呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.224.42.44

11/09 01:48, , 1F
a爆表了,應該要是*8,再者,實數整數之間互轉要注意。
11/09 01:48, 1F

11/09 13:21, , 2F
唔,不對,*8也會爆表,改用浮點數表示吧。
11/09 13:21, 2F

11/09 13:38, , 3F
double 的精確度是 2^52 ,所以 要改良計算的方法
11/09 13:38, 3F

11/09 18:09, , 4F
應該極限了吧..用EXCEL算 就知道真實的位數了
11/09 18:09, 4F
文章代碼(AID): #1AzlcBRC (Fortran)
文章代碼(AID): #1AzlcBRC (Fortran)