Исключение с плавающей точкой при чтении реальных значений из входного файла
Я пытаюсь прочитать значение с плавающей точкой из входного файла в 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
Я предполагаю, что мое действие чтения не является правильным. Так это ошибка нормально? Есть ли правильный способ прочитать реальные значения?
1 ответ
Исключения с плавающей запятой неточные и ненормальные случаются слишком часто, и во время законного использования арифметики с плавающей запятой неточна. Почти вся реальная арифметика с плавающей точкой. Даже чтение одного числа из файла или клавиатуры, потому что не все десятичные числа могут быть сохранены точно в двоичном виде. Денормал бывает чуть реже, но использование все же может быть законным.
Поэтому бесполезно отлавливать эти исключения с плавающей запятой. Даже недостаток спорен. Я бы не стал ловить его по умолчанию, но я вижу его полезность.