0

在 fortran77 中使用以下计算 PI 时,编译器会评估这个值还是会在运行时评估它?

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

4

2 回答 2

1

对数学函数的调用通常在运行时进行评估。毕竟,没有什么可以阻止您编写自己的数学函数。如果在编译时对它们进行评估,这是不可能的。

于 2010-01-29T14:24:16.257 回答
1

编辑:取决于编译器:请参阅下面的编辑。编辑结束

我赞同 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编辑结束

于 2010-01-29T15:44:46.223 回答