2017-02-07 1 views
0

Fortran의 입력 파일에서 부동 소수점 값을 읽으려고합니다. toto.txt 내 실제 값을 포함하는 텍스트 파일입력 파일에서 실제 값을 읽을 때 부동 소수점 예외

... 
INTEGER   :: nf 
REAL    :: re 

OPEN(newunit=nf, file='toto.txt') 

READ(unit=nf, fmt=*) re 
... 

:

10.1001 ! this value is supposed to be read by the Fortran program 

내가 컴파일하고 다음과 같이 실행하면이 모든 것이 잘 작동을

은이 코드를 사용하여 이렇게하려면.

그러나 컴파일 할 때 약간의 문제가 발생하며 fpe 옵션으로 실행하십시오. gfortran -g1 -c -fbacktrace -ffpe-trap=invalid,zero,overflow,underflow,inexact,denormal -Wall -fcheck=all my_prog.f90

내가 내 읽기 동작이 적절하지 가정 : 나는 gfortran 명령을 사용

Program received signal SIGFPE: Floating-point exception - erroneous arithmetic operation 

Backtrace for this error 
#0 0xfffffff 
#1 0xfffffff 
... 

: 나는처럼 보이는 재 부가 ​​라인에 오류가 있습니다. 오류가 정상입니까? 실제 가치를 읽을 수있는 적절한 방법이 있습니까?

+1

전체 코드와 입력 파일이 필요합니다. [mcve]를 참조하십시오. 그 행동은 정상적인 것이 아니며 그 문제는 다른 곳에있을 것입니다. –

+2

어,'부정확, denormal'을 사용하지 마십시오. 당신이하는 일을 잘 알지 않는 한 실제로 사용하고 싶지 않습니다! –

+3

gfortran 문서에서 : "부동 소수점 연산의 대부분은 반올림으로 인해 정밀도가 떨어지므로 ffpe-trap = inexact가 실제로는 흥미롭지 않을 수 있습니다." – agentp

답변

0

부동 소수점 예외 이 너무 자주 소수점 연산 부동 부정확 인의 합법적 인 사용 중에 발생 부정확 한 및 비정규. 거의 모든 실제 부동 소수점 연산. 모든 십진수가 정확하게 바이너리로 저장 될 수는 없으므로 파일이나 키보드에서 하나의 숫자를 읽는 경우에도 마찬가지입니다. 비정규 성은 약간 자주 발생하지만 사용은 여전히 ​​합법적 일 수 있습니다.

따라서 이러한 부동 소수점 예외를 트랩하는 것은 유용하지 않습니다. 언더 플로우조차도 논쟁의 여지가 있습니다. 나는 기본적으로 그것을 함정에 넣지 않을 것이지만, 나는 그것의 유용성을 볼 수있다.