在 fortran77 中使用以下计算 PI 时,编译器会评估这个值还是会在运行时评估它?
PI=4.D0*DATAN(1.D0)
对数学函数的调用通常在运行时进行评估。毕竟,没有什么可以阻止您编写自己的数学函数。如果在编译时对它们进行评估,这是不可能的。
编辑:取决于编译器:请参阅下面的编辑。编辑结束
我赞同 Mick Sharpe 的建议,即它将在运行时进行评估。只是出于好奇,我PI=4.D0*DATAN(1.D0)
用Silverfrost 的 ftn77 编译器编译并查看了生成的二进制文件。相关部分如下所示:
fld1 ; push 1.D0 onto the FPU register stack
call ATAN_X
fmul dbl_404000 ; multiply by 4.D0
确实,这里没有编译器的聪明之处。
这当然可能与另一个编译器(例如 g77)不同。编辑:显然,使用 g77(gcc 的 fortran77 前端)可以(并且默认启用)使用 gcc 的内置 atan 函数自动折叠PI=4.D0*DATAN(1.D0)
成一个 constant。编辑结束