Фортран 95: встроенная оценка условий if - PullRequest
2 голосов
/ 07 февраля 2011

Вот небольшой фрагмент кода, который возвращает epsilon () для реального значения:

program epstest
real :: eps=1.0, d
do
  d=1.0+eps  
  if (d==1.0) then
    eps=eps*2
    exit
  else
    eps=eps/2
  end if
end do
write(*,*) eps, epsilon(d)
pause
end program

Теперь, когда я заменяю условие if на

   if (1.0+eps==1.0) then

программа должна иметь то же самое взамен, но, к сожалению, этого не происходит! Я протестировал его с последней версией (снимка) g95 для Linux и Windows.

Может кто-нибудь объяснить мне эту проблему?

1 Ответ

2 голосов
/ 07 февраля 2011

Арифметика с плавающей точкой имеет много тонких проблем.Одна форма исходного кода может генерировать машинные инструкции, отличные от другой, казалось бы, почти идентичного исходного кода.Например, «d» может храниться в ячейке памяти, в то время как «1.0 + eps» может оцениваться исключительно с помощью регистров ... это может привести к различной точности.

В общем, почему бы не использовать встроенные функциипредусмотрено для Фортрана 95, раскрывающего характеристики конкретной точности вещественных чисел?

...