ここに、実際の値に対して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
プログラムは見返りに同じであるはずですが、残念ながらそうではありません!LinuxとWindowsでg95の最新(スナップショット)リリースでテストしました。
誰かがその問題を私に説明できますか?