Значения «плавающего неверного» из компилятора ifort - PullRequest
0 голосов
/ 30 января 2019

Я использую компилятор ifort для своего кода на Фортране.

Иногда я получаю сообщение об ошибке во время работы:

forrtl: error (65): floating invalid

Компилятор не дает точную причину "неверно".Насколько я понимаю, это предполагает одно из следующего?

  1. Underflow, что означает слишком близкое к 0, например, 1e-30.
  2. Overflow, что означает слишком большое, например, бесконечность/ -infinity, делить на ноль.
  3. NaN.

Это полезно, потому что я могу использовать оператор if, чтобы проверить, какой из этих случаев действительно имел место.

Кроме того, я использую опцию -g -traceback для отладки.Есть ли вариант, который дает более подробную информацию?

1 Ответ

0 голосов
/ 30 января 2019

Компилятор Intel Fortran обычно использует арифметику IEEE.«Плавающее недействительное» сообщение является результатом необработанного исключения IEEE из недопустимой операции.

Переполнение и переполнение не рассматриваются как недопустимые операции (обратите внимание, что деление нуля само по себе или бесконечность на другую бесконечность недопустимыне переполняется).В основных терминах недопустимая операция - это операция, в которой математически операнд не находится в области действия оператора.Не только эти два примера, упомянутых ранее, но такие вещи, как получение квадратного корня или логарифма отрицательного действительного числаИли использовать ненадлежащим образом NaN.

Компилятор Intel уже некоторое время поддерживает функции IEEE в Fortran 2003.Вы можете использовать их для точного отслеживания исключений.Опция времени компиляции fpe определяет, как компилятор реагирует на исключения.

...