Conference Room SAD
[thread display] [new arrival display] [word search] [past log] [管理用]

Subject Re^10: SAD Update. V1.0.10.2.3b. g95 compatible.
Date: 2008/02/21(Thu) 04:24:39
ContributorAkio Morita

> 4. GNU Fortran 4.2.x/Intel Fortran 8.1では書式指定 "An"は、
> n文字幅で characterを出力する
> つまり、10文字相当の integer*1 bar(10)配列を "(A10)"で書式指定すると
> 10文字幅の出力 * 10文字に展開される
> 1文字幅の出力 * 10文字の書式指定は、"(10A1)"である
>
> "(A10)" + 長さ10の配列が "(10A10)"相当に展開されるなら、
> 実は"(A1)"で十分かもしれない(規格に当たってみる必要あり)
> Rev 1.59の "(1024a1)"は、Rev 1.58の"(1000000000a1)"を実装系に
> 拒否されなくなるまで Cut&Tryで短くした結果ある
>
> 5. "nA1"の書式指定での、繰り返し数 nの上限は実装依存である
> writebのオリジナルコード(Rev. 1.58)での"(1000000000a1)"などという書式しては
> Intel Fortranでは実行時に無効な書式指定であるとして拒否される
> これは、Fortran I/Oライブラリ内でランタイムに処理されているので、動的に生成しても
> この制約から逃れられない
このへんの話を今日 Webでいろいろ調べたまとめ
http://jyurai.ddo.jp/~amorita/diary/?date=20080220

1. 改行編集記述子$は、Fortran95規格ではIBM拡張であり、非標準
2. Fortran90以降だと、停留入出力で改行を抑止した出力が可能
ADVANCE='NO'を指定すると、writeの終了時の改行が消える
ただし、(3)の扱いを当てにして(a1)を使う場合、(a1)を処理し終わって
(a1)から処理を再開するときに改行が出力されるので注意
3. ($,1024a1)の代わりに、($,a1)で大丈夫そう
HP Fortranのマニュアルには、この扱いは拡張であるとは書かれていないが、
どのFortran規格を出典にしているかは不明

たぶん、Fortran90的には (###a1)な formを動的に生成して、
ADVANCE='NO'で出力するのが正当な気がするが、
IBM拡張を当てにするなら ($,a1)で十分


- 関連一覧ツリー (Click ▼ to display all articles in a thread.)