在FORTRAN中将数字定义为参数是否有性能优势

在FORTRAN中将数字定义为参数是否有性能优势,fortran,vectorization,Fortran,Vectorization,我正在试验编写矢量化FORTRAN子程序,将其并入Abaqus有限元解算器。一些学习材料将公式中使用的常量定义为代码开头的参数,例如: parameter ( zero = 0.d0, one = 1.d0, two = 2.d0, third = 1.d0 / 3.d0, half = 0.5d0, op5 = 1.5d0) 因此,与其写0.5*a,不如写half*a。这有性能优势吗 编辑:我更深入地挖掘,在第11页(幻灯片A3.22)中找到了这一点: 参数赋值产生精确的浮点常量 任何平台上

我正在试验编写矢量化FORTRAN子程序,将其并入Abaqus有限元解算器。一些学习材料将公式中使用的常量定义为代码开头的参数,例如:

parameter ( zero = 0.d0, one = 1.d0, two = 2.d0, third = 1.d0 / 3.d0, half = 0.5d0, op5 = 1.5d0)
因此,与其写
0.5*a
,不如写
half*a
。这有性能优势吗

编辑:我更深入地挖掘,在第11页(幻灯片A3.22)中找到了这一点:

参数赋值产生精确的浮点常量 任何平台上的定义


不,没有任何性能差异。生成的代码将完全相同。它可能只是为了使使用这些数字更方便或(据说)更易读


但是你必须小心。仅0.5是一个(默认)单精度数字。必须使用常量定义中使用的方法
0.5d0
是双精度,该常数将帮助您不会忘记
d0
。在二进制数格式中,0.5无论如何都是完全可以重新表示的,但举例来说,三分之一就不可以了。

谢谢。看来准确度是目标。编辑问题以反映这一点。你是在哪里找到这段引文的,还是你对弗拉基米尔F的答案的解释?“在后一种情况下,我不认为他写了/有意那样做。”艾伯特补充道。这是一个由软件生产公司制作的教育幻灯片。事实上,我认为,对于这种特殊情况,报价是有效的(因为他们使用d0结构),但一般来说,它对
参数
语句无效,只有当程序员处理它并在其代码中使用
参数时才能保证。幻灯片的一个问题是,它也讲了一个故事,幻灯片只是要记住的要点的一个抽象。我还是不明白。我看不出
two
2.d0
在性能(生成相同的代码)、清晰度(数学是通用的,英语不是)或方便性(也许你可以把精度作为实现细节隐藏起来,但即使这样也有争议,因为“显式优于隐式”)。无论如何,我可能大部分时间只使用
2
,corecion将确保表达式类型的精度。这可能与以下方面有关:(1)代码用于实现复杂的材料行为,这很难测试。(2)该接口的更改往往非常缓慢,因此可能存在未披露的遗留问题。