0


0

PI = 4.D0 * DATAN(1.D0)のFortran77コンパイラー処理

fortran77でPIを計算するために以下を使用する場合、コンパイラはこの値を評価しますか、それとも実行時に評価されますか?

_ PI = 4.D0 * DATAN(1.D0) _

2 Answer


1


数学関数の呼び出しは通常、実行時に評価されます。 結局のところ、独自の数学関数を書くのを止めることは何もありません。 コンパイル時に評価された場合、これは不可能です。


1


編集:コンパイラに依存します。以下の編集を参照してください。 編集終了

実行時に評価されるというMick Sharpeの提案の2番目です。 好奇心から、私はhttp://www.silverfrost.com/53/ftn77/ftn77_dbos_history.aspx[Silverfrost’s ftn77コンパイラ]で `PI = 4.D0 * DATAN(1.D0)`をコンパイルし、生成されたバイナリを見ました。 関連部分は次のようになります。

fld1                 ; push 1.D0 onto the FPU register stack
call    ATAN_X
fmul    dbl_404000   ; multiply by 4.D0

確かに、ここではコンパイラの賢さはありません。

もちろん、これは別のコンパイラーとは異なる場合があります(例: g77)。 編集:明らかに、g77(gccのfortran77フロントエンド)では、gccのhttp://gcc.gnu.org/onlinedocs/gcc-4.2.4/gcc/Otherを使用できます(デフォルトで有効になっています) -Builtins.html [ビルトインatan関数]からhttps://stackoverflow.com/questions/19/fastest-way-to-get-value-of-pi[auto-fold `PI = 4.D0 * DATAN( 1.D0) `から定数へ]。 編集終了