なぜ 1+1 が 10 にならないのだろう
まず、Fortran で '1.+1' という文字列を実数として読み取るとどうなるかというと、1.e+1 の e が省略されたもの、と解釈されて、10.0 になるわけです。
例
real a character(len=32) s s='1.+1' read(s, *) a write(*, *) a read(s, '(f8.4)') a write(*, *) a read(s, '(f10.4)') a write(*, *) a read(s, '(f10.6)') a write(*, *) a end
実行結果
10.0000000 10.0000000 10.0000000 10.0000000
この '1.+1' を '1+1' に変える。
real a character(len=32) s s='1+1' read(s, *) a write(*, *) a read(s, '(f10.4)') a write(*, *) a read(s, '(f10.5)') a write(*, *) a read(s, '(f10.6)') a write(*, *) a end
するととどうなるか。Gfortran 4.8.5 の場合以下のようになる。
10.0000000 1.00000005E-03 9.99999975E-05 9.99999975E-06
デフォルトの書式 (*) にした場合は 10 になるものの、書式を指定すると奇妙な結果になる。
一体どういうことだろう。