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来使整个表达式加倍?
答案 0 :(得分:1)
1.0D + 0就是一个。添加一个数字肯定会改变数字。
我认为“nint”只是意味着“圆”。
答案 1 :(得分:1)
正如其他人所提到的,D
表示双精度。
至于nint
,您可以通过声明宏
#define nint(x) x - (int) x > 0.5 ? (int) x+1 : (int) x
由于(int) x
本质上向下舍入,我们只是从初始值中减去它,看看余数(只是小数位)是否大于一半。如果是,我们使用(int) x+1
,否则我们会使用(int) x
。
答案 2 :(得分:0)
答案 3 :(得分:0)
1.0D + 0只是1.0。添加D + 0以使其具有双精度。