なぜ 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 になるものの、書式を指定すると奇妙な結果になる。
一体どういうことだろう。