[질문] intel fortran 8.1 사용시에..

blackash의 이미지

program test
IMPLICIT NONE
REAL*8 ::x,y
integer ::i
do i=0,100
x=real(i,8)
y=x*1.0D-3
write (*,*) x,y
end do
end program

Quote:

81.0000000000000 8.100000000000000E-002
82.0000000000000 8.200000000000000E-002
83.0000000000000 8.300000000000000E-002
84.0000000000000 8.400000000000001E-002
85.0000000000000 8.500000000000001E-002
86.0000000000000 8.599999999999999E-002
87.0000000000000 8.699999999999999E-002
88.0000000000000 8.799999999999999E-002
89.0000000000000 8.900000000000000E-002
90.0000000000000 9.000000000000000E-002

이런 결과가 나오는데 옵션을 잘못주고 컴파일을 해서 그런것인지 원래 저렇게 나오는것이 맞는지 궁금합니다.
yuni의 이미지

자료를 검색하다가 보니 정말 오랜된 질문인데, 답변을 한번 달아 봅니다. :roll:(먼산)

blackash wrote:
program test
IMPLICIT NONE
REAL*8 ::x,y
integer ::i
do i=0,100
x=real(i,8)
y=x*1.0D-3
write (*,*) x,y
end do
end program

Quote:

81.0000000000000 8.100000000000000E-002
82.0000000000000 8.200000000000000E-002
83.0000000000000 8.300000000000000E-002
84.0000000000000 8.400000000000001E-002
85.0000000000000 8.500000000000001E-002
86.0000000000000 8.599999999999999E-002
87.0000000000000 8.699999999999999E-002
88.0000000000000 8.799999999999999E-002
89.0000000000000 8.900000000000000E-002
90.0000000000000 9.000000000000000E-002

이런 결과가 나오는데 옵션을 잘못주고 컴파일을 해서 그런것인지 원래 저렇게 나오는것이 맞는지 궁금합니다.

제가 아는 몇몇 포트란 컴파일러의 디폴트 값은

 real*4 ::x,y
real(type=4) :: x,y 

로 하시면 precision: 7-8 decimal digits입니다.
지금은 이값을 8로 주셨기 때문에 precision: 15-16 decimal digits입니다.

==========================
부양가족은 많은데, 시절은 왜 이리 꿀꿀할까요?
=====================
"지금하는 일을 꼭 완수하자."