Fortran转换为C语言

时间:2014-01-03 12:48:47

标签: 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,变量'input rate'应该足够了 - 不是吗?我的意思是,如果你添加一个double变量和一个常量,加法值应该是double,不是吗?为什么尝试通过在语法的每个部分使用double来使整个表达式加倍?

4 个答案:

答案 0 :(得分:1)

1.0D + 0就是一个。添加一个数字肯定会改变数字。

我认为“nint”只是意味着“圆”。

答案 1 :(得分:1)

正如其他人所提到的,D表示双精度。

至于nint,您可以通过声明宏

在C中模仿它
#define nint(x) x - (int) x > 0.5 ? (int) x+1 : (int) x

由于(int) x本质上向下舍入,我们只是从初始值中减去它,看看余数(只是小数位)是否大于一半。如果是,我们使用(int) x+1,否则我们会使用(int) x

答案 2 :(得分:0)

我明白了!

1.0D+..意味着权力10。

例如

100可写为1.0D + 2或10.0D + 1

查看该功能,它实际上是试图将该数字乘以10来获得功率9.必须是一些必需的转换。

答案 3 :(得分:0)

1.0D + 0只是1.0。添加D + 0以使其具有双精度。