2013-04-10 2 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)를 계산할 때이 프로그램을 발견했습니다. 사용자가 sin (x) 값을 입력 한 것은 전체 조건을 얻지 못했기 때문입니다. (abs (term) .gt. 0.000001) 이것은 컴퓨터가 이보다 더 정확하게 할 수 없다는 뜻입니까? 내가 틀렸다면 나를 바로 잡으시오.Fortran을 사용하여 Sin (x) 계산하기

답변

2

이 프로그램은 기본 실수 변수를 사용합니다. 그들은 대개 약 정밀도를 허용합니다. 6 자리. 더 많은 것을 허용 할 수있는 이른바 double precision을 사용할 수 있습니다. 아래에서 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)은 용어가 0이 아닌지 테스트하는 방법입니다. 정수의 경우 if (term .ne. 0)을 사용하지만 실수의 경우 내부적으로 0으로 표시되지 않을 수 있습니다. if (abs(term) .gt. 0.000001)은 실수의 정밀도 내에서 0이 아닌 숫자를 필터링합니다.

관련 문제