Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran 奇怪的函数调用行为_Fortran_Fortran90 - Fatal编程技术网

Fortran 奇怪的函数调用行为

Fortran 奇怪的函数调用行为,fortran,fortran90,Fortran,Fortran90,我对Fortran还很陌生,我在“玩”函数。 我在一个非常简单的程序中发现了一个非常奇怪的行为,我无法以任何方式证明它是正确的。下面是简单的代码: Real*8 Function gamma(v) Implicit None Real*8 :: v gamma = 1.0_8 / Sqrt(1.0_8 - v ** 2) End Function gamma Program test_gamma Implicit None Real*8 :: v = 0.5_8, gamma pr

我对Fortran还很陌生,我在“玩”函数。 我在一个非常简单的程序中发现了一个非常奇怪的行为,我无法以任何方式证明它是正确的。下面是简单的代码:

Real*8 Function gamma(v)
 Implicit None
 Real*8 :: v
 gamma = 1.0_8 / Sqrt(1.0_8 - v ** 2)
End Function gamma

Program test_gamma
 Implicit None
 Real*8 :: v = 0.5_8, gamma
 print *,"Gamma = ", 1.0_8 / Sqrt(1.0_8 - v ** 2)
End Program
这将打印准确的结果:
1.1547005383792517
但是如果我使用函数调用,执行相同的计算,
print*,“Gamma=,Gamma(v)
我会得到意外的结果
1.7724538509055161


这里缺少什么?

值1.7724538509055161对应于参数为0.5的(数学)伽马函数的(正确)结果。标准内在函数
gamma
返回与此gamma函数对应的结果

在调用
gamma
的程序中,您已声明gamma返回
real*8
结果,但未将
external
属性赋予它,也未通过其他方式提供接口。因此,本质上是被调用的:编译主程序时,编译器“知道”没有其他选择[如果你要求的话,我希望在这种情况下编译器会发出警告。]

我建议您调用函数而不是
gamma
,而不是添加
external
属性。我甚至建议,对于程序中有接口的函数

“接口可用”,我的意思是您可以:

  • gamma
    函数放在主程序内部
  • 将您的
    gamma
    函数放在主程序使用的模块
    
    
  • [提供一个接口块。]
有关详细信息,请参阅编程指南


最后,我还要推荐另外一件事:no
real*8
。你可以在这里看到很多关于这方面的评论。

谢谢,是的,我在声明中添加了gamma,
Real*8::v=0.5_8,gamma
,但结果没有改变。我想这个函数从来没有因为某种原因被调用过。非常感谢!我不知道Fortran有一个内置的gamma函数,它是2008年标准中新增的。从技术上讲,我的答案对的不是那么有效。它仍然有效,函数以前是一个通用的供应商扩展(这是标准允许的),错误也会以同样的方式发生。