[英]Floating point exception when reading real values from an input file
我嘗試從Fortran
的輸入文件中讀取浮點值。
為此,我使用以下代碼:
...
INTEGER :: nf
REAL :: re
OPEN(newunit=nf, file='toto.txt')
READ(unit=nf, fmt=*) re
...
使用 toto.txt 包含我的真實值的文本文件:
10.1001 ! this value is supposed to be read by the Fortran program
如果我像這樣編譯和執行,一切正常。
但是當我使用fpe
選項編譯和執行時,我遇到了一些麻煩。 我在閱讀行有一個錯誤,看起來像:
Program received signal SIGFPE: Floating-point exception - erroneous arithmetic operation
Backtrace for this error
#0 0xfffffff
#1 0xfffffff
...
我使用gfortran
命令: gfortran -g1 -c -fbacktrace -ffpe-trap=invalid,zero,overflow,underflow,inexact,denormal -Wall -fcheck=all my_prog.f90
我認為我的閱讀操作不正確。 那么這個錯誤正常嗎? 有沒有正確的方法來讀取真實值?
浮點異常不精確和非規范發生的方式過於頻繁,並且在合法使用浮點運算期間是不精確的。 幾乎所有真實世界的浮點運算。 甚至從文件或鍵盤讀取單個數字,因為並非所有十進制數字都可以完全以二進制形式存儲。 異常發生的頻率略低,但使用仍然是合法的。
因此捕獲這些浮點異常是沒有用的。 甚至下溢也是有爭議的。 我不會默認捕獲它,但我可以看到它的用處。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.