使用以下方法在fortran77中计算PI时,编译器会评估此值还是在运行时进行评估?
PI = 4.D0 * DATAN(1.D0)
答案 0 :(得分:1)
通常在运行时评估对数学函数的调用。毕竟,没有什么可以阻止你编写自己的数学函数。如果在编译时对它们进行评估,则无法做到这一点。
答案 1 :(得分:1)
编辑:取决于编译器:请参阅下面的编辑。 编辑结束
我是第二个Mick Sharpe的建议,它将在运行时进行评估。出于好奇,我用Silverfrost's ftn77 compiler编译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(gran的fortran77前端)可以使用gcc的built-in atan function到auto-fold PI=4.D0*DATAN(1.D0)
into a constant(并默认启用)。 编辑结束