算术常量表达式中的取幂

时间:2012-04-16 12:28:50

标签: fortran fortran77

事实证明,以下在fortran 77中是非法的:

c
      program main
      real a
      parameter(a=(10.)**(.5))
c
...

原因是因为参数语句采用常数算术表达式,并且取幂是非法的,除非指数是整数。 (第6.1.3和8.6节http://www.fortran.com/F77_std/rjcnf0001-sh-8.html#sh-8.6)。有人知道这个限制是否在标准的新修订中放宽了吗?为什么这首先是非法的?

2 个答案:

答案 0 :(得分:3)

是的,这已经放松了。在Fortran 2003中,您甚至可以使用sinexp等内在函数。

答案 1 :(得分:0)

我的猜测是整数指数有一个简单的实现,编译器可以调用它来将值替换为预编译步骤。但是,非整数指数(和负指数)可能具有无法评估为实数的值;关键不在于这个例子是不可估量的,只是编译器需要是可预测的,只是使这些表达式失败比编写一个可以确定给定表达式是否会评估为合理数字的例程更简单。请记住,这是在编译之前完成的,而不是通过编译表达式,运行它和使用值来完成的,所以范围不像普通的fortran那么宽。

如果这对您来说是个问题,那么请考虑使用宏和F90 / F77而不是f90 / f77文件,以便编译器知道运行预处理器。

或者只是将计算器上的值计算为16dp并使用它。

或者让它成为普通变量而不是参数。成本很低。