modulo симметричный арифметический остаток от деления по модулю m
pmodulo положительный арифметический остаток от деления по модулю m

## Синтаксис

    i = modulo(n,m)

    i = pmodulo(n,m)

## Аргументы

m, n

  Скаляр, вектор, матрица или гиперматрица закодированных целых чисел, реалов или многочлены с вещественными коэффициентами. `m` и `n` должны иметь один и тот же тип. Если они имеют целочисленный тип, они могут иметь разную длину кодирования (например, int8 и int16). Если ни один из них не является скалярным, они должны иметь одинаковые размеры.

i

  Скалярная, векторная, матричная или гиперматрица типа `n` (и inttype). `i` принимает размеры более крупного `m` или `n`.

  Для полиномов, если все остатки от деления в массиве `i` являются константами (порядок равен 0), то `i` имеет тип 1 (числа) вместо 2 (постоянные полиномы).

## Описание

`modulo` вычисляет `i = n (modulo m)`, т. е. остаток от деления `n` на `m` (`n` и `m` - целые числа).

Для полиномов используется `pdiv()`.

Для чисел,

- `modulo()` вычисляет `i = n - m. * int (n ./ m)`. Результат отрицательный (или нулевой), когда `n` отрицательный, и в противном случае.

- `pmodulo()` вычисляет `i = n - | m | . * floor (n ./ | m |)`, ответ является положительным либо равным причинам.

Если `m` содержит хотя бы одно значение 0, `modulo(x, m)` и `pmodulo(x, m)` выполнит деление на ноль. Если `m` имеет реальный тип, это исключение будет обрабатываться в соответствии с к режиму `ieee()`. Для закодированных целых чисел он всегда будет давать ошибку.

## Примеры

    n = [1,2,10,15];
    m = [2,2,3,5];
    modulo(n,m)

    modulo(-3, 9)
    modulo(10, -4)

    pmodulo(-3, 9)
    pmodulo(10, -6)
    pmodulo(-10, -6)

    // Кодированные целые числа
    modulo( int8(-13), int16(-7))
    pmodulo(int8(-13), int16(-7))
    modulo( int8(-13), int16([-7 5]))
    pmodulo(int8(-13), int16([-7 5]))
    modulo( int8([-13 8]), int16(-7))
    pmodulo(int8([-13 8]), int16(-7))
    modulo( int8([-13 8]), int16([-7 5]))
    pmodulo(int8([-13 8]), int16([-7 5]))

    // гиперматрицам
    m = grand(2,2,2,"uin",-100,100)
    n = grand(2,2,2,"uin",-10 ,10);
    n(n==0) = 1
    modulo(m, 5)
    pmodulo(m,5)
    modulo(51, n)
    pmodulo(51,n)
    modulo(m, n)
    pmodulo(m,n)

    // Полиномы
    modulo( %z^2+1, %z)
    pmodulo(%z^2+1, %z)

## Смотрите также

- unwrap
- ieee

## История

5.5.0 Расширение до кодированных целых чесел и гиперматриц кодированных целых чисел или вещественных чисел.
6.0.2 Расширение до гиперматриц полиномов.