Целочисленное деление#
Fortran различает арифметику чисел с плавающей точкой и целочисленную арифметику. Важно отметить, что при делении целых чисел всегда используется целочисленная арифметика. Кроме того, хотя Fortran использует стандартный порядок операций (например, умножение и деление имеют приоритет выше чем сложение и вычитание, при отсутствии скобок), операции с одинаковым приоритетом производятся слева направо. Рассмотрим следующий пример целочисленного деления нечётного числа:
integer :: n
n = 3
print *, n / 2 ! prints 1
print *, n*(n + 1)/2 ! prints 6
print *, n/2*(n + 1) ! prints 4 (left-to-right evaluation order)
n = -3
print *, n / 2 ! prints -1
Будьте осторожны, если вы действительно хотите использовать целочисленную арифметику в данном контексте. Если вы хотите использовать арифметику чисел с плавающей точкой, то перед использованием оператора деления обязательно приведите его к вещественному виду или разделите целые числа операцией умножения на 1.0_dp
:
integer :: n
n = 3
print *, real(n, dp) / 2 ! prints 1.5
print *, n * 1.0_dp / 2 ! prints 1.5
n = -3
print *, real(n, dp) / 2 ! prints -1.5
print *, n * 1.0_dp / 2 ! prints -1.5