Ошибка при сравнении между переменной двойной точности и значением двойной точности в FTN95

Я использую FORTRAN 95 с Silverfrost Plato. Здесь я пытаюсь создать условный оператор для сравнения переменной двойной точности со значением двойной точности. Почему-то компилятор не понимает условия.

program db
implicit none
integer :: j,n
double precision :: t,t_max,dt
n = 20
dt = 0.000020d0
t_max = 0.00632d0
t = 0.0d0
while (t .LE. t_max) do
    if ( t == 0.00158d0) then
        do j = 0,n
            print  *, j
        end do
    end if
print *, t 
t = t + dt    
end do
end program db

Я не могу решить эту проблему самостоятельно. Буду очень признателен за любую помощь или ссылки на соответствующую документацию.


person Suga    schedule 24.04.2016    source источник
comment
stackoverflow.com/q/588004/1004168   -  person agentp    schedule 25.04.2016
comment
Вероятно, также не повредит написать синтаксически правильный Фортран. Эта строка, while (t .LE. t_max) do, неверна, do должна предшествовать while.   -  person High Performance Mark    schedule 25.04.2016
comment
Если вы действительно хотите увидеть, что происходит, попробуйте вывести разницу между t и 0,00158d0 каждый раз в цикле. Затем вы можете увидеть, что добавление 0,000020d0 несколько раз к нулю никогда не будет точно равно 0,00158d0. Мало того, вам нужно знать, что когда вы установите x=0,00158d0, x не будет точно равно 0,00158d0, потому что это число не может быть точно выражено конечным числом двоичных разрядов.   -  person FredK    schedule 26.04.2016