8

write(*,*)Fortranでのリスト出力の結果はコンパイラに依存することに気付きました。

確かに、コードで:

program one
real(8), dimension(5):: r1
do i=1,5
    r1(i)=sqrt(i*10.0)
end do
write(*,*) (r1(i), i =1,5)
end program one

intel コンパイラの ifort は、改行で分割された標準出力を提供します。

   3.16227769851685        4.47213602066040        5.47722530364990     
   6.32455539703369        7.07106781005859     

一方、gfortran は同等の 1 行の結果を返します。

    3.1622776601683795        4.4721359549995796        5.4772255750516612        6.3245553203367590        7.0710678118654755     

ifort は 1 行あたり最大 3 項目を書き込んでいると思います (浮動実数の場合)。ifort の出力を gfrotran のようにする、つまり改行を避ける方法はありますか? 理想的には、リスト指示の出力(*,*)命令を保持したいので、コンパイラ オプションのようなものを探しています。

4

4 に答える 4

7

バージョン 14 以降、Intel Fortran コンパイラにはラップマージン機能があります。デフォルトでは、レコードは 80 文字で折り返されます。この制限を無効にするには、次を指定する必要があります。

Linux の場合: -no-wrap-margin

Windows の場合: /wrap-margin-

インテル Fortran のリファレンス ガイドの詳細を参照してください。

于 2014-11-04T12:51:59.960 に答える
2

お気に入りの Fortran の本やオンライン ドキュメントで編集記述子を調べてください。ステートメントで指定子を使用fmtして、write編集記述子を指定できます。例えば:

write(*,fmt='(5(F6.4,3X))') (r1(i), i =1,5)

次のような出力が必要です。

3.1623   4.4721   5.4772   6.3246   7.0711   
于 2013-07-01T14:57:12.180 に答える
-2

https://software.intel.com/en-us/forums/topic/401555を参照してください

FORT_FMT_RECL を指定するか、write ( ," (G0,1X))"を使用します。

于 2014-05-19T07:41:54.823 に答える