我正在查看最小二乘法的代码,我遇到了以下几行:
static double one = 1.0;
static double p1 = 0.1;
static double p5 = 0.5;
...
我想知道为什么有人会为 1.0
定义一个 static
。例如,我可以理解 pi
有一些东西,但是对于 1.0
和 0.1
等微不足道的数学值?我认为这会降低代码的可读性,但它可能还有一些我遗漏的其他好处。
那么,这些定义有原因吗?或者,如果它没有与现代代码一起使用,那么旧编译器是否有任何原因?我知道我正在查看的代码已从 FORTRAN 翻译成 C/C++。在 FORTRAN 中有什么原因吗?
I know that the code that I'm looking at was translated to C/C++ from
FORTRAN. Were there any reasons for this in FORTRAN?
FORTRAN 对所有子例程参数都使用按引用传递。但是,与其他具有按引用传递的语言不同,它仍然允许您将“右值”作为参数传递。在幕后,FORTRAN 编译器将代码转换为:
CALL SUBFOO(X + Y, 4)
像这样编码
TEMP1 = X + Y
TEMP2 = 4
CALL SUBFOO(TEMP1, TEMP2)
这正是您的 C++ 代码正在做的事情:创建变量以将指针(或引用)传递给 FORTRAN 样式的子例程。
当然,这不是惯用的 C 或 C++。通常,您会按值传递 double
。
(从我对 this question 的回答中复制的代码示例。)