2013-04-10 206 views
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)很明顯的罪(x)由用戶進入了我的價值沒有得到的條件整點(abs(term).gt。0.000001)這是否意味着計算機不能比這更精確。糾正我,如果我錯了計算的sin(x)使用Fortran語言

回答

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 

這是非標準的。

0

條件if (abs(term) .gt. 0.000001)是測試該術語非零的一種方法。使用整數,您只需使用if (term .ne. 0),但對於實數,它可能不會在內部表示爲相同的零。 if (abs(term) .gt. 0.000001)過濾實數精度內非零的數字。