* Bugs 7562 + 15517 fixed: factorial() improved
[scilab.git] / scilab / modules / elementary_functions / help / ru_RU / discrete / factorial.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!--
3  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
4  * Copyright (C) 2018 - Samuel GOUGEON
5  *
6  * This file is hereby licensed under the terms of the GNU GPL v2.0,
7  * pursuant to article 5.3.4 of the CeCILL v.2.1.
8  * This file was originally licensed under the terms of the CeCILL v2.1,
9  * and continues to be available under such terms.
10  * For more information, see the COPYING file which you should have received
11  * along with this program.
12  *
13  -->
14 <refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
15         xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns3="http://www.w3.org/1999/xhtml"
16         xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook"
17         xmlns:scilab="http://www.scilab.org" xml:id="factorial" xml:lang="ru">
18     <refnamediv>
19         <refname>factorial</refname>
20         <refpurpose>функция факториала : произведение первых n положительных целых чисел</refpurpose>
21     </refnamediv>
22     <refsynopsisdiv>
23         <title>Синтаксис</title>
24         <synopsis>
25             f = factorial(n)
26             [f, p] = factorial(n)
27             [f, p, m] = factorial(n)
28         </synopsis>
29     </refsynopsisdiv>
30     <refsection role="arguments">
31         <title>Аргументы</title>
32         <variablelist>
33             <varlistentry>
34                 <term>n</term>
35                 <listitem>
36                     <para>
37                         скаляр, вектор, матрица или гиперматрица положительных целых чисел
38                         &lt;= 10<superscript>14</superscript>.
39                     </para>
40                 </listitem>
41             </varlistentry>
42             <varlistentry>
43                 <term>f</term>
44                 <listitem>
45                     <para>
46                         массив чисел типа double того же размера, что и <literal>n</literal>:
47                         <literal>f(i) = n(i)!</literal>.
48                         Значения <varname>f</varname> могут быть вплоть до <literal>n=21</literal>.
49                     </para>
50                 </listitem>
51             </varlistentry>
52             <varlistentry>
53                 <term>p</term>
54                 <listitem>
55                     <para>
56                         массив чисел типа double того же размера, что и <literal>n</literal>:
57                         10 в степени <varname>f</varname>: <literal>p(i) = int(log10(f(i)!))</literal>.
58                     </para>
59                 </listitem>
60             </varlistentry>
61             <varlistentry>
62                 <term>m</term>
63                 <listitem>
64                     <para>
65                         массив чисел типа double в интервале <literal>[1,10)</literal> того же размера, что и <literal>n</literal>:
66                         мантисса у <varname>f</varname> такая, что <literal>n(i)! = m(i) * 10^p(i)</literal>.
67                     </para>
68                 </listitem>
69             </varlistentry>
70         </variablelist>
71     </refsection>
72     <refsection role="description">
73         <title>Описание</title>
74         <para>
75             Возвращает факториал от <literal>n</literal>, равный произведению <literal>1 * 2 * ... * n</literal>.
76         </para>
77         <warning>
78             <varname>f</varname> превышает разрядную сетку при <literal>n&gt;170</literal> и всегда возвращает <literal>%inf</literal> для любого большего <literal>n</literal>.
79         </warning>
80         <note>
81             <itemizedlist>
82                 <listitem>
83                     Для <literal>n</literal> в <literal>[22, 170]</literal> относительная точность
84                     <varname>f</varname> примерно равна <literal>%eps ~ 2e-16</literal>.
85                 </listitem>
86                 <listitem>
87                     Для <literal>n</literal> в <literal>[171, 1.0x10<superscript>14</superscript>]</literal> значение
88                     степени <varname>p</varname> равна точно и относительная точность мантиссы <varname>m</varname> 
89                     примерно равно <literal>n*%eps ~ n * 1e-16</literal> (см. последний пример).
90                 </listitem>
91                 <listitem>
92                     После <literal>n > 10.0<superscript>14</superscript></literal>,
93                     <varname>p</varname> становится > 1/%eps и ограничивается. Тогда нельзя более
94                     получить надёжную мантиссу.
95                 </listitem>
96             </itemizedlist>
97         </note>
98                 <para/>
99     </refsection>
100     <refsection>
101         <title>Граф</title>
102         <scilab:image>
103             x = (10^(0:13)).*.(1:9); x(1)=[]; x($)=1e14;
104             [f, p, m] = factorial(x);
105             plot2d("ll", x, p+log10(m))
106             xlabel("n", "fontsize",3)
107             title("$\mathsf{log_{10}(n!)}$", "fontsize", 4)
108             xgrid(color("grey70"), 1, 7)
109             set(gca(), "sub_ticks",[8 2], "tight_limits","on");
110             gca().data_bounds([1 4]) = [1 2e15];
111             gcf().axes_size = [840 470];
112         </scilab:image>
113     </refsection>
114     <refsection role="examples">
115         <title>Примеры</title>
116         <para>Таблица первых точных значений факториала n! :</para>
117         <programlisting role="example"><![CDATA[
118 format(22);
119 n = (0:21)';
120 [n factorial(n)]
121 format(10);
122    ]]></programlisting>
123    <screen><![CDATA[
124 --> [n factorial(n)]
125  ans  =
126    0.    1.
127    1.    1.
128    2.    2.
129    3.    6.
130    4.    24.
131    5.    120.
132    6.    720.
133    7.    5040.
134    8.    40320.
135    9.    362880.
136    10.   3628800.
137    11.   39916800.
138    12.   479001600.
139    13.   6227020800.
140    14.   87178291200.
141    15.   1307674368000.
142    16.   20922789888000.
143    17.   355687428096000.
144    18.   6402373705728000.
145    19.   121645100408832000.
146    20.   2432902008176640000.
147    21.   51090942171709440000.
148 ]]></screen>
149         <para>Округление значения factorial() в большую сторону в представлении с плавающей запятой:</para>
150       <programlisting role="example"><![CDATA[
151 factorial(170) // 7.257415615307998967e306
152 factorial(171) // %inf
153    ]]></programlisting>
154         <para>Построение графика функции во всём её интервале:</para>
155       <programlisting role="example"><![CDATA[
156 x = (10^(0:13)).*.(1:9); x(1)=[]; x($)=1e14;
157 [f, p, m] = factorial(x);
158 clf
159 plot2d("ll", x, p+log10(m))
160 xlabel("n", "fontsize",3)
161 title("$\mathsf{log_{10}(n!)}$", "fontsize", 4)
162 xgrid(color("grey70"), 1, 7)
163 set(gca(), "sub_ticks",[8 2], "tight_limits","on");
164 gca().data_bounds([1 4]) = [1 2e15];
165 gcf().axes_size = [850 480];
166    ]]></programlisting>
167         <para>Относительные ошибки factorial():</para>
168       <programlisting role="example"><![CDATA[
169 n = 10^(1:14)';
170 [f, p, m] = factorial(n);
171 // Точная (ограниченная) мантисса для n = 10^(1:14) :
172 m0 = [
173    3.6288000000000000  9.3326215443944153  4.0238726007709377 ..  // n = 10     100   1000
174    2.8462596809170545  2.8242294079603479                     ..  // n = 10000  100000
175    8.2639316883312401  1.2024233400515904  1.6172037949214624 ..  // n = 1e6    1e7   1e8
176    9.9046265792229937  2.3257962056730834  3.7489285991050270 ..  // n = 1e9    1e10  1e11
177    1.4036611603737561  2.4033300843401153  1.6456020559872979     // n = 1e12   1e13  1e14
178    ]';
179 r_err = m./m0 - 1;
180 [n r_err]
181    ]]></programlisting>
182    <screen><![CDATA[
183 --> [n r_err]
184  ans  =
185    10.          0.
186    100.        -5.551D-16
187    1000.        1.132D-13
188    10000.       1.918D-12
189    100000.      6.611D-12
190    1000000.     9.962D-11
191    10000000.    5.048D-08
192    100000000.   1.050D-08
193    1.000D+09   0.0000001
194    1.000D+10   0.0000019
195    1.000D+11   0.0000062
196    1.000D+12   0.0001327
197    1.000D+13   0.0004839
198    1.000D+14   0.0071116
199 ]]></screen>
200     </refsection>
201     <refsection role="see also">
202         <title>Смотрите также</title>
203         <simplelist type="inline">
204             <member>
205                 <link linkend="cumprod">cumprod</link>
206             </member>
207             <member>
208                 <link linkend="gamma">gamma</link>
209             </member>
210             <member>
211                 <link linkend="gammaln">gammaln</link>
212             </member>
213         </simplelist>
214     </refsection>
215     <refsection role="history">
216         <title>История</title>
217         <revhistory>
218             <revision>
219                 <revnumber>6.1</revnumber>
220                 <revdescription>
221                     Расширение вплоть до n = 10<superscript>14</superscript>.
222                     Добавлено <varname>p</varname> в 10-й степени и вывод мантиссы <varname>m</varname>.
223                 </revdescription>
224             </revision>
225         </revhistory>
226     </refsection>
227 </refentry>