FORTRAN(書式付き表示その5)

旧2-5. Fortran毎日学習
TVアニメ「ブレンド・S」のWEB施策ビストロスティーレ第12回公開!

アニメ『ブレンド・S』

こんな喫茶店で毎朝コーヒーを飲みたいです。できれば毎日家と喫茶店の往復がいいです。

今回もFORTRANのFORMATの続きで、FORMATの記述子Gです。

Gは、自動で判別して、FまたはEの書式で表示します。

takk@deb9:~$ cat disp.f
       REAL A
       A=123.45
       WRITE(*,11111) A
       WRITE(*,22222) A
       WRITE(*,33333) A
       WRITE(*,44444) A
11111  FORMAT(G10.5)
22222  FORMAT(g10.4)
33333  FORMAT(g10.3)
44444  FORMAT(g10.2)
       STOP
       END
takk@deb9:~$

実行結果です。

takk@deb9:~$ gfortran disp.f
takk@deb9:~$ ./a.out
123.45
 123.4
  123.
  0.12E+03
takk@deb9:~/gf$

C言語のprintfの書式にも%Gがありますが、素通りしてました。今回初めて意味を知りました。なぜGという文字を使うのかは謎です。

C書式に対応しているprintfコマンドで確認してみます。

takk@deb9:~$ printf "%10.5g\n" 123.45
    123.45
takk@deb9:~$

FORTRANのFORMATよりも分かりやすいです。全体を10桁右詰で表示し、仮数部を5桁で表示してますね。
printfを知ってしまったら、FORTRANの方のG10.5の10はいったい何の意味があるのでしょう、と疑問。printfを10.5gから10.2gまでの結果を並べてみてみます。

takk@deb9:~$ printf "%10.5g\n" 123.45
    123.45
takk@deb9:~$ printf "%10.4g\n" 123.45
     123.4
takk@deb9:~$ printf "%10.3g\n" 123.45
       123
takk@deb9:~$ printf "%10.2g\n" 123.45
   1.2e+02
takk@deb9:~$

FORTRANのFORMATで 0.12E+03 だったのが、printfでは 1.2e+02 と表示されました。
printfはてっきりFORTRANを参考にしたとばかり思ってましたが、どうなんでしょう。

コメント

タイトルとURLをコピーしました