作者mon02118 (我不是好男人)
看板Fortran
標題[問題] 準確度問題
時間Mon Nov 9 01:01:58 2009
我們老師出一個作業
計算
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
1F:→ gilocustom:a爆表了,應該要是*8,再者,實數整數之間互轉要注意。 11/09 01:48
2F:→ gilocustom:唔,不對,*8也會爆表,改用浮點數表示吧。 11/09 13:21
3F:推 sjgau:double 的精確度是 2^52 ,所以 要改良計算的方法 11/09 13:38
4F:推 jubilee2:應該極限了吧..用EXCEL算 就知道真實的位數了 11/09 18:09