Операция по модулю должна найти остаток от деления числа на другое. Но, строго говоря, в большинстве основных языков программирования неисправность операции по модулю, если дивиденд или / и делитель отрицательны . Это включает PHP, Perl, Python, Java, C, C ++ и т. Д.
Почему я говорю неисправность? Поскольку согласно математическому определению, остаток должен быть нулевым или положительным .
Простое решение - разобраться с делом самостоятельно:
if r < 0 then r = r + |divisor|;
| делитель | является абсолютным значением делителя.
Другое решение - использовать библиотеку (как указывал @Gordon). Однако я бы не стал использовать библиотеку для обработки простого случая, подобного этому.