以下を使用してfortran77でPIを計算する場合、コンパイラはこの値を評価しますか、それとも実行時に評価されますか?
PI = 4.D0 * DATAN(1.D0)
数学関数の呼び出しは通常、実行時に評価されます。結局のところ、独自の数学関数を書くのを止めるものは何もありません。コンパイル時に評価された場合、これは不可能です。
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)
ことが可能です (デフォルトで有効になっています) 。編集終了