Result = (1.0D+0 + DBLE( Input rate)/ 1.0D + 5) ** (1.0D+0/1.2D+1) - 1.0D+0
A = idnint4 (result*1.0D+9);
这两行 Fortran 代码令人困惑。我已经将许多Fortran代码转换为C。但是我在这里无法理解为什么作者将1.0D + 0添加到变量中。它对变量没有影响,不是吗?同样 idnint 等价物是 nint,它在 C 库中不可用。请记住我只能使用 C 编译器,甚至不能使用 C++ 编译器。
有 Fortran 专家可以指导我完成这个吗?
更新:很抱歉让大家对此感到困惑。我明白 1.0D+0 等于 1。加上 1 肯定会改变值。我的意思是把1写成1.0D+0有什么变化?试图使该表达式加倍?在那种情况下,变量“输入速率”如果声明为 double 就足够了——不是吗?我的意思是,如果你添加一个double变量和一个常量,相加的值应该是double,不是吗?为什么要在语法的每个部分都使用 double 来使整个表达式加倍?
最佳答案
正如其他人所提到的,D
表示 double 。
至于 nint
,您可以通过声明宏在 C 中模仿它
#define nint(x) x - (int) x > 0.5 ? (int) x+1 : (int) x
由于 (int) x
本质上是向下舍入的,我们只需从初始值中减去它,然后查看余数(仅小数位)是否大于一半。如果是,我们使用 (int) x+1
否则我们使用 (int) x
。
关于c - Fortran 到 C 的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20904057/