作者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