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(AB) + ANINT(CD) + ANINT(B+DE)
G = NINT(F) + 1D0;
也许 FORTRAN 专家可以帮助澄清为什么作者选择使用两者(我假设这是故意的)。