2016-02-25 2 views
0

В настоящее время я использую вычислительную модель в Fortran. Во время вычисления иногда я получал «NaN», «Бесконечность» и цифры, превышающие двойную точность (отображается как **************). И мне нужно их обнаружить. Я могу обнаружить «NaN» с помощью следующей команды.Обработка NaN, бесконечности и чисел, превышающих двойную точность в Fortran?

if(isnan(result))then 
    continue = .false. 
else 
    continue = .true. 
endif 

Я не знаю, как определить «Infinity» и «************» (чисел больше, чем с двойной точностью).

Как это сделать?

+1

Звездочка не означает, что числа «больше, чем двойная точность», но вместо этого они переполнения спецификатор формата при печати. Это может быть, например, возникают, если вы печатаете целое число из двух цифр, используя только один символ. –

+0

У вас есть комплимент, который поддерживает встроенные модули 'ieee_ *'? – francescalus

+1

Возможный дубликат [Есть ли стандартный способ проверки для Infinite и NaN в Fortran 90/95?] (Http://stackoverflow.com/questions/17389958/is-there-a-standard-way-to-check- for-infin-and-nan-in-fortran-90-95) –

ответ

0

Теперь я решил создать звездочку со следующей командой (хотя это может быть и не так эффективно). Спасибо, Александр Фогт.

if(isnan(result))then 
    continue = .false. 
    elseif(result.gt.1.d20)then 
    continue = .false. 
    else 
    continue = .true. 
    endif 

Однако я до сих пор не могу решить проблему «Бесконечность». Я попробовал «IEEE», но мой компилятор не поддерживал.

Благодаря

+1

Не можете ли вы просто проверить, если 'result> огромный (результат)'? –

+0

для надежности вы должны поймать -инфинити тоже. 'abs (x) <= огромный (x)' ловит все три '+/- inf' и' NAN' (я должен сказать, что не знаю, гарантировано ли это для каждого стандарта) – agentp

Смежные вопросы