program test_log
integer, parameter :: Dbl_K = selected_real_kind (14)
real(Dbl_K) :: e = 2.7182818284590451_Dbl_K
real(Dbl_K) :: e2 = 2.7182818284590451D0
real(Dbl_K) :: e3 = exp(1.0)
real(Dbl_K) :: e4 = exp(1.0_Dbl_K)
write(*,*) 'log(2.7..)', log(2.7182818284590451_Dbl_K)
write(*,*) 'log(e)', log(e)
write(*,*) 'log(e2)', log(e2)
write(*,*) 'log(e3)', log(e3)
write(*,*) 'log(e4)', log(e4)
end program test_log
doubleの値である8に依存する代わりに、selected_real_kindを使用します。
SnowLeopardを搭載したMacBookProでのgfortran4.6および4.7の出力は次のとおりです。
log(2.7..) 1.0000000000000000
log(e) 1.0000000000000000
log(e2) 1.0000000000000000
log(e3) 0.99999996963214000
log(e4) 1.0000000000000000
「exp(1.0)」は単精度実数として1を持っているため、e3の値は1とは異なります。
Lionを搭載した新しいMacAirでは、間違った結果が得られます。私はこのマシンでgfortranの他の問題を観察しました。
gfortran 4.6
log(2.7..) 1.6249753165355076
log(e) 1.6249753165355076
log(e2) 1.6249753165355076
log(e3) 1.6438056251294211
log(e4) 1.6438055841322456
gfortran 4.7
log(2.7..) 1.6249753165355076
log(e) 1.0000000000000000
log(e2) 1.0000000000000000
log(e3) 1.0188423211430429
log(e4) 1.0188422801197137
したがって、問題は一意ではありません。それが何であるかわからない。
PS MacAirコンパイラオプションでは、出力を変更します。どのオプションが重要かわかりません。
PPS
program test2_log
real:: e = 2.7182818284590451
real:: e2 = 2.7182818284590451D0
real:: e3 = exp(1.0)
real:: e4 = exp(1.0)
write(*,*) 'log(2.7..)', log(2.7182818284590451)
write(*,*) 'log(e)', log(e)
write(*,*) 'log(e2)', log(e2)
write(*,*) 'log(e3)', log(e3)
write(*,*) 'log(e4)', log(e4)
end program test2_log
MacAirでは、gfortran4.6は次のことを提供します。
log(2.7..) 1.3489696
log(e) 0.99999994
log(e2) 0.99999994
log(e3) 1.0188423
log(e4) 1.0188423
コンパイラオプション-fdefault-real-8を使用すると、次のように変更されます。
log(2.7..) 1.6249753165355076
log(e) 1.0000000000000000
log(e2) 1.0000000000000000
log(e3) 1.0188422801197137
log(e4) 1.0188422801197137
インストールに欠陥があります。
編集:両方のマシンのすべてのgfortranバージョンはMacPortsからのものです。OSのバージョンとは違うのですか?ライオンではなく、ユキヒョウで動作します。