Исключение с плавающей точкой при чтении реальных значений из входного файла

Я пытаюсь прочитать значение с плавающей точкой из входного файла в 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 ответ

Решение

Исключения с плавающей запятой неточные и ненормальные случаются слишком часто, и во время законного использования арифметики с плавающей запятой неточна. Почти вся реальная арифметика с плавающей точкой. Даже чтение одного числа из файла или клавиатуры, потому что не все десятичные числа могут быть сохранены точно в двоичном виде. Денормал бывает чуть реже, но использование все же может быть законным.

Поэтому бесполезно отлавливать эти исключения с плавающей запятой. Даже недостаток спорен. Я бы не стал ловить его по умолчанию, но я вижу его полезность.

Другие вопросы по тегам