FORTRAN提供了几种将双精度数字转换为整数值的功能。截断/舍入所使用的方法不同。我正在转换使用这些算法的复杂科学算法。

根据FORTRAN文档:
aint(x)返回x到0(最接近x)之间的整数值。
anint(x)将最接近的整数值返回给x,除了中间情况是
         四舍五入到较大的整数值。
nint(x)将x转换为四舍五入为最接近的int值的int格式,除了
         中途情况将舍入为较大的int值。

有人在C#中实现这些吗?
正确处理可能很棘手。

(int)x似乎与aint()相匹配
Convert.ToInt32(x)与以上任何都不匹配。
Trunc(x)与以上任何一项都不匹配。
Round(x)可能匹配anint或nint。

anint和nint之间的区别似乎是返回类型,其中anint返回一个双精度值,而nint返回一个整数。都使用(实际示例):
双精度A,B,C,D,E,F,G
...此处设置的值...
F = ANINT(A-B)+ ANINT(C-D)+ ANINT(B + D-E)
G = NINT(F)+ 1D0;
也许FORTRAN专家可以帮助阐明作者为什么选择同时使用两者(我认为这是故意的)。

最佳答案

根据呼叫的定义,nintanintMath.Round使用MidpointRounding.AwayFromZero提供。

对于aint,从doubleint的显式转换将实现该结果。

关于c# - 在C#中匹配FORTRAN舍入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/247143/

10-10 13:45