Когда я создаю скалярный INTEGER, s и передаю его подпрограмме, его значение преобразуется в float и ужасно неточно. Например, если я установил s = 2 и CALL print_my_int (s), где он будет писать (,), он будет отображаться на консоли, это значение отображается как 2.80259693E-45. Другие скалярные целые числа ведут себя аналогично, за исключением случая, когда s = 0, и в этом случае выход равен 0,0000000. Но даже это по-прежнему не так, поскольку целое число должно, очевидно, не отображать десятичную и мантиссу. Это НЕ проблема выходного формата, так как я могу заставить другие целые числа отображаться правильно при отображении на локальном компьютере.Помощь! Передача целых чисел FORTRAN превращает их в неточные поплавки?
Любые подсказки относительно того, что здесь происходит? Нужно ли принудительно вводить тип данных аргумента в определение подпрограммы? Можно ли это сделать?
Пример код:
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
Он также работал бы, если вы изменили имя параметра с 'x' на' i' или 'j', потому что FORTRAN имеет вывод типа на основе начальных символов имен переменных. Но не делайте этого - это плохая практика. – JasonFruit
Спасибо, сэр. Удобный совет, но я буду помнить, чтобы избежать злоупотребления служебным положением. –
полезно использовать оператор «implicit none» в начале каждой программы/подпрограммы, если вы хотите, чтобы компилятор задушил неперечисленные переменные. – steabert