Когда я создаю скалярный INTEGER s и передаю его подпрограмме, его значение преобразуется в число с плавающей точкой и ужасно неточно. Например, если я установлю s = 2 и CALL print_my_int (s), где он будет записывать (, ) его в консоль, его значение будет отображаться как 2.80259693E-45. Другие скалярные целые числа ведут себя аналогично, за исключением случая, когда s = 0, и в этом случае выходной результат равен 0,0000000. Но даже это все равно неправильно, поскольку целое число, очевидно, не должно отображать десятичную и мантиссу. Это НЕ проблема с выходным форматом, так как я могу заставить другие целые числа правильно отображаться при локальном отображении.
Есть хоть какой-то ключ к пониманию того, что здесь происходит? Нужно ли принудительно указывать тип данных аргумента в определении подпрограммы? Можно ли это сделать?
Пример кода:
PROGRAM print_int
INTEGER s
s = 2
CALL print_my_int(s)
END PROGRAM print_int
SUBROUTINE print_my_int(x)
WRITE(*,*) x
END SUBROUTINE print_my_int
Результирующий вывод:
2.80259693E-45