<?xml version="1.0" encoding="UTF-8"?>
<!--
 * Scilab ( https://www.scilab.org/ ) - This file is part of Scilab
 * Copyright (C) 2008 - INRIA
 * Copyright (C) 2013 - Samuel GOUGEON
 *
 * Copyright (C) 2012 - 2016 - Scilab Enterprises
 *
 * This file is hereby licensed under the terms of the GNU GPL v2.0,
 * pursuant to article 5.3.4 of the CeCILL v.2.1.
 * This file was originally licensed under the terms of the CeCILL v2.1,
 * and continues to be available under such terms.
 * For more information, see the COPYING file which you should have received
 * along with this program.
 *
 -->
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
        xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns5="http://www.w3.org/1999/xhtml"
        xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook"
        xmlns:scilab="http://www.scilab.org" xml:id="modulo" xml:lang="ru">
    <refnamediv>
        <refname>modulo</refname>
        <refpurpose>симметричный арифметический остаток от деления по модулю m</refpurpose>
    </refnamediv>
    <refnamediv xml:id="pmodulo">
        <refname>pmodulo</refname>
        <refpurpose>положительный арифметический остаток от деления по модулю m</refpurpose>
    </refnamediv>
    <refsynopsisdiv>
        <title>Синтаксис</title>
        <synopsis>i = modulo(n,m)</synopsis>
        <para></para>
        <synopsis>i = pmodulo(n,m)</synopsis>
    </refsynopsisdiv>
    <refsection>
        <title>Аргументы</title>
        <variablelist>
            <varlistentry>
                <term>m, n</term>
                <listitem>
                    <para>
                        Скаляр, вектор, матрица или гиперматрица закодированных целых чисел,
                        реалов или многочлены с вещественными коэффициентами.
                        <varname>m</varname> и <varname>n</varname> должны иметь один и тот же тип.
                        Если они имеют целочисленный тип, они могут иметь разную длину кодирования
                        (например, int8 и int16).
                        Если ни один из них не является скалярным, они должны иметь одинаковые размеры.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>i</term>
                <listitem>
                    <para>
                        Скалярная, векторная, матричная или гиперматрица типа <varname>n</varname>
                        (и inttype).
                        <varname>i</varname> принимает размеры более крупного <varname>m</varname>
                        или <varname>n</varname>.
                    </para>
                    <para>
                        <warning>
                            Для полиномов, если все остатки от деления в массиве <varname>i</varname>
                            являются константами (порядок равен 0), то <varname>i</varname> имеет тип 1
                            (числа) вместо 2 (постоянные полиномы).
                        </warning>
                    </para>
                </listitem>
            </varlistentry>
        </variablelist>
    </refsection>
    <refsection>
        <title>Описание</title>
        <para>
            <function>modulo</function> вычисляет <literal>i = n (modulo m)</literal>,
            т. е. остаток от деления <varname>n</varname> на <varname>m</varname>
            (<varname>n</varname> и <varname>m</varname> - целые числа).
        </para>
        <para>Для полиномов используется <literal>pdiv()</literal>.</para>
        <para>
            Для чисел,
            <itemizedlist>
                <listitem>
                    <para>
                        <literal>modulo()</literal> вычисляет <literal>i = n - m. * int (n ./ m)</literal>.
                        Результат отрицательный (или нулевой), когда <varname>n</varname>
                        отрицательный, и в противном случае.
                    </para>
                </listitem>
                <listitem>
                    <para>
                        <literal>pmodulo()</literal> вычисляет
                        <literal>i = n - | m | . * floor (n ./ | m |)</literal>,
                        ответ является положительным либо равным причинам.
                    </para>
                </listitem>
            </itemizedlist>
        </para>
        <para>
            <warning>
                Если <varname>m</varname> содержит хотя бы одно значение 0, <literal>modulo(x, m)</literal>
                и <literal>pmodulo(x, m)</literal> выполнит деление на ноль.
                Если <varname>m</varname> имеет реальный тип, это исключение будет обрабатываться
                в соответствии с к режиму <literal>ieee()</literal>.
                Для закодированных целых чисел он всегда будет давать ошибку.
            </warning>
        </para>
    </refsection>
    <refsection>
        <title>Примеры</title>
        <programlisting role="example"><![CDATA[
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)
 ]]></programlisting>
    </refsection>
    <refsection role= "see also">
        <title>Смотрите также</title>
        <simplelist type="inline">
            <member>
                <link linkend="unwrap">unwrap</link>
            </member>
            <member>
                <link linkend="ieee">ieee</link>
            </member>
        </simplelist>
    </refsection>
    <refsection>
        <title>История</title>
        <revhistory>
            <revision>
                <revnumber>5.5.0</revnumber>
                <revremark>Расширение до кодированных целых чесел и гиперматриц кодированных целых чисел или вещественных чисел.</revremark>
            </revision>
            <revision>
                <revnumber>6.0.2</revnumber>
                <revremark>Расширение до гиперматриц полиномов.</revremark>
            </revision>
        </revhistory>
    </refsection>
</refentry>
