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 возвращает целое число. Используются оба (фактический образец):
DOUBLE PRECISION A, B, C, D, E, F, G
... значения, установленные здесь ...
F = ANINT (AB) + ANINT ( CD) + ANINT (B + DE)
G = NINT (F) + 1D0;
Возможно, эксперт по ФОРТРАНУ может помочь прояснить, почему автор решил использовать оба (я предполагаю, что это было намеренно).