Fortran到C的转换

Fortran到C的转换,c,fortran,C,Fortran,这两行fortran代码令人困惑。我已经将许多Fortran代码转换为C。但是我不明白作者为什么在变量中添加1.0D+0。它对变量没有影响,不是吗?同样,idnint的等价物将是nint,这在C库中是不可用的。请记住,我只能使用C编译器,甚至C++编译器。p> 任何Fortran专家都能指导我完成这项工作吗 更新:很抱歉,我把你们都弄糊涂了。我知道1.0D+0等于1。加上1肯定会改变值。我的意思是把1写成1.0D+0会有什么变化?想让这个表达加倍吗?在这种情况下,变量“输入速率”如果声明为dou

这两行fortran代码令人困惑。我已经将许多Fortran代码转换为C。但是我不明白作者为什么在变量中添加1.0D+0。它对变量没有影响,不是吗?同样,idnint的等价物将是nint,这在C库中是不可用的。请记住,我只能使用C编译器,甚至C++编译器。p> 任何Fortran专家都能指导我完成这项工作吗


更新:很抱歉,我把你们都弄糊涂了。我知道1.0D+0等于1。加上1肯定会改变值。我的意思是把1写成1.0D+0会有什么变化?想让这个表达加倍吗?在这种情况下,变量“输入速率”如果声明为double就足够了-否?我的意思是,如果你加上一个双变量和一个常数,加法应该是双变量,不是吗?为什么要通过在语法的每个部分使用double来使整个表达式加倍呢?

1.0D+0就是其中之一。在数字上加一肯定会改变数字

我想“nint”只是指“round”。

我明白了

意味着10倍的力量

例如

100可以写成1.0D+2或10.0D+1


看看这个函数,它实际上是想把这个数字乘以10,再乘以9的幂。必须进行一些必要的转换。

1.0D+0就是1.0。我想D+0的加入是为了使其达到双精度。

正如大家所提到的,
D
表示双精度

对于
nin
,您可以在C中通过声明宏来模拟这一点

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);

由于
(int)x
本质上是四舍五入的,所以我们只需从初始值中减去它,看看余数(仅小数点)是否大于一半。如果是,我们使用
(int)x+1
,否则我们使用
(int)x

为什么添加1不会对结果产生影响?
1.0D+0
1.0
的FORTRAN文本,具有双精度。对于
C
只需将
D
替换为
E
:-)
#define nint(x) x - (int) x > 0.5 ? (int) x+1 : (int) x