0
      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)这是否意味着计算机不能比这更精确。如果我错了,请纠正我

4

2 回答 2

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

这是非标准的。

于 2013-04-10T08:41:26.570 回答
0

条件if ( abs(term) .gt. 0.000001)是一种测试项是否为非零的方法。对于整数,您只需使用if (term .ne. 0),但对于实数,它可能不会在内部表示为相同的零。 if ( abs(term) .gt. 0.000001)过滤在实数精度范围内非零的数字。

于 2013-04-26T06:41:58.910 回答