Fortran MOD и MODULO дают одинаковые результаты - PullRequest
0 голосов
/ 29 ноября 2018

Компиляция с gfortran --version == GNU Fortran (Homebrew GCC 8.2.0) 8.2.0

Когда я пишу следующий тестовый код, я получаю функции MOD и MODULO, дающие одинаковые результаты,Однако, как я понимаю из нескольких источников, MOD должен давать остаток, а MODULO должен давать целое отношение.

program test
    implicit none

    print *, mod(17,3)
    print *, mod(17.5,5.5)
    print *, mod(17.5d0,5.5)
    print *, mod(17.5,5.5d0)

    print *, modulo(17,3)
    print *, modulo(17.5,5.5)
    print *, modulo(17.5d0,5.5)
    print *, modulo(17.5,5.5d0)
end program test

Распечатывает:

2

1.00000000

1.0000000000000000

1.0000000000000000

2

1.00000000

1.0000000000000000

1.0000000000000000

Результатами являются все остатки, что и должно делать MOD, но для MODULO не предполагаетсяраспечатать модуль, в данном случае 5, а затем три 3 с переменной точностью?

1 Ответ

0 голосов
/ 29 ноября 2018

Вы неправильно понимаете назначение этих функций.Они должны дать вам один и тот же ответ, а именно остаток от деления, во многих ситуациях (например, когда оба аргумента положительны).Но рассмотрим это

print *, mod(-17, 3)
print *, mod(-17., 3.)
print *, modulo(-17, 3)
print *, modulo(-17., 3.)

end

, которое вернет

-2
-2.000000
1
1.000000

, поэтому ответ будет положительным для положительного p (второй аргумент) и фактически должен иметь тот же знак, что и p.Точные определения см. В документации

MOD MODULO

...