FORTRAN提供了幾個函數來將雙精度數轉換爲整數值。用於截斷/舍入的方法不同。我正在轉換使用這些的複雜科學算法。在C中匹配FORTRAN舍入#
根據FORTRAN文檔:
AINT(x)的返回x和0,最近的X之間的積分值。
anint(x)返回x的最接近的整數值,除了中途情況是 四捨五入到量值較大的整數值。
nint(x)將x轉換爲int格式,舍入爲最接近的int值,除了 中途情況被四捨五入爲整數值的幅度更大。
有沒有人有這些在C#中的實現? 這可能會很棘手。
(int)x似乎與aint()
Convert.ToInt32(x)不符合上述任何一項。
Trunc(x)不符合上述任何一項。
Round(x)可能匹配anint或nint。
anint和nint之間的區別似乎是返回類型,其中anint返回雙精度值,但nint返回整數。兩者都用於(實際樣品):
DOUBLE PRECISION A,B,C,D,E,F,G
...此處設置的值...
F = ANINT(AB)+ ANINT(CD)+ ANINT(B + DE)
G = NINT(F)+ 1D0;
也許FORTRAN專家可以幫助澄清爲什麼作者選擇使用兩者(我假設它是故意的)。
文檔: http://msdn.microsoft.com/en-us/library/system.math.round.aspx 在早期版本的C#中不存在。 – 2008-10-29 16:17:14
謝謝,馬克。在早期的版本中,我並沒有意識到它的缺失。 – 2008-10-29 17:10:33