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专家可以帮助阐明作者为什么选择同时使用两者(我认为这是故意的)。
最佳答案
根据呼叫的定义,nint
和anint
由Math.Round
使用MidpointRounding.AwayFromZero
提供。
对于aint
,从double
到int
的显式转换将实现该结果。
关于c# - 在C#中匹配FORTRAN舍入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/247143/