c - Fortran 到 C 的转换

标签 c fortran

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/

相关文章:

c - 如何正确链接两个源文件?未定义的引用错误

c - C 中的 OOP、继承和错误

matlab - 如何将 MATLAB 变量写入格式如 3.4d3 的文本文件

Cmake : file is not copying

c - Arduino程序中LED无法闪烁3次

尝试在 C 中释放 3D 数组时崩溃

c - C语言程序,用于在给定编号的FACTORIAL末尾找到尾随的ZEROS

multithreading - Fortran 基本函数与基本子例程

algorithm - Fortran 中的 Morris Pratt 表

types - 使用 % 运算符访问时,Fortran 类型变量为零