【问题标题】:Explain the meaning of X02AJF(0.D0)解释X02AJF(0.D0)的含义
【发布时间】:2021-02-18 08:42:57
【问题描述】:

如果我在 fortran 中有这个功能

DOUBLE PRECISION FUNCTION         X02AJF()


 !     RETURNS  (1/2)*B**(1-P)  IF ROUNDS IS .TRUE.


!     RETURNS  B**(1-P)  OTHERWISE
 
      DOUBLE PRECISION X02CON 

      DATA X02CON / 2.D-3 /

!     .. Executable Statements ..

      X02AJF = X02CON

      RETURN

      END

那么这个变量的值是多少

EPS = X02AJF(0.D0)

我不知道这是什么意思

X02AJF(0.D0)???

EPS=0的意思吗??

【问题讨论】:

  • 根据 NAG documentationX02AJF 需要 no 参数,所以它应该被称为 X02AJF ()
  • 但是有很多程序使用这个表达式 EPS = X02AJF(0.D0)
  • 例如这个程序在下面的链接netlib.org/toms-2014-06-10/775
  • X02AJF 是在 NAG 库的 Mark 12 中引入的。我找不到那个旧版本的文档。回到标记 19 的 Internet 可访问 NAG 库文档显示 X02AJF 没有参数/参数。
  • 一些使用X02AJF 的程序员可能会感到困惑,因为同一节中的旧函数需要一个虚拟参数,例如X02AHF。我的问题是:您的代码实际上是在使用 NAG 库,还是提供了自己的自制替代 X02AJF

标签: math fortran


【解决方案1】:

我不知道这是什么意思

X02AJF(0.D0)???

严格按照FORTRAN语言,这是一个错误的函数调用。

是不是意味着 EPS=0 ??

没有。 EPS == 2.D-3,但这是未定义的行为。

非正式地,在可选属性 Fortran 90 之前,许多经常违反匹配参数数量的要求。例如,System V ABI AMD64 定义对 FORTRAN 函数的调用类似于对 C 函数的调用。因此,在这种情况下,X02AJF(0.D0) 的结果将与 X02AJF() 相同。

【讨论】:

    猜你喜欢
    • 2015-04-03
    • 1970-01-01
    • 2017-05-02
    • 1970-01-01
    • 2020-03-11
    • 2020-06-22
    • 2012-04-10
    • 2017-08-09
    • 1970-01-01
    相关资源
    最近更新 更多