Я пытаюсь прочитать значение float из входного файла в 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
. У меня есть ошибка в readding линии, которая выглядит как:
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
я предполагаю мое действие чтение не является правильным. Так ли эта ошибка нормальная? Есть ли способ читать реальные ценности?
Нам понадобится полный код и входной файл. См. [Mcve]. Поведение не является нормальным, и проблема, скорее всего, в другом месте. –
Uh и не используйте 'inexact, denormal', вы действительно не хотите использовать это, если не знаете, что вы делаете! –
из gfortran docs: «Многие, если не большинство, операции с плавающей запятой несут потерю точности из-за округления, и, следовательно, ffpe-trap = неточно, вероятно, будет неинтересным на практике». – agentp