0

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

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

4

2 に答える 2

1

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

于 2010-01-29T14:24:16.257 に答える
1

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

実行時に評価されるという Mick Sharpe の 2 番目の提案。好奇心から、Silverfrost の 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 など) では異なる場合があります。EDIT : どうやら、g77 (gcc の fortran77 フロントエンド) では、gcc の組み込み atan 関数を使用して定数に自動折り畳むPI=4.D0*DATAN(1.D0)ことが可能です (デフォルトで有効になっています) 。編集終了

于 2010-01-29T15:44:46.223 に答える