integer n
real term , sum , deg
write(*,*) 'Enter Degree'
read(*,*) deg
deg = deg * 3.14 /180
n = 3
term = deg
sum = 0
2 if ( abs(term) .gt. 0.000001) then !<<<<<<<<<<< THIS CONDITION
goto 1
else
goto 3
endif
1 sum = sum + term
write( *,*) 'Your', n - 2, ' Term is ' , term
term = term *(( deg ** 2)/ (n *( n - 1))) * (-1)
n = n + 2
goto 2
3 write(*,*) ' YOur final sum ' , sum
pause
end
我发现这个程序用于计算Sin(x)很明显,sin(x)的值是由用户输入的,我没有得到整个条件(abs(term).gt 。0.000001)这是否意味着计算机不能比这更精确。如果我错了,请纠正我
答案 0 :(得分:2)
该程序使用默认的实变量。它们通常允许精度约为。 6位数。你可以使用所谓的双精度,它可以提供更多。下面你看到15位数的例子。
integer,parameter :: dp = selected_real_kind(p=15,r=200)
real(dp) :: term , sum , deg
deg = deg * 3.14_dp /180
依旧......
请参阅:
http://gcc.gnu.org/onlinedocs/gfortran/SELECTED_005fREAL_005fKIND.html
http://gcc.gnu.org/onlinedocs/gfortran/ISO_005fFORTRAN_005fENV.html(尤其是real64)
在旧程序中,您还可以看到
double precision x
已过时,或
real*8 x
这是非标准的。
答案 1 :(得分:0)
条件if ( abs(term) .gt. 0.000001)
是一种测试该术语非零的方法。对于整数,您只需使用if (term .ne. 0)
,但对于实数,它可能不会在内部表示为相同的零。 if ( abs(term) .gt. 0.000001)
过滤在实数精度范围内非零的数字。