Skip to content

Commit 5d9a080

Browse files
committed
Created powmod()
1 parent 0d349e7 commit 5d9a080

File tree

2 files changed

+203
-0
lines changed

2 files changed

+203
-0
lines changed

reference/bc/bcmath/number/powmod.xml

Lines changed: 202 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,202 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<refentry xml:id="bcmath-number.powmod" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
3+
<refnamediv>
4+
<refname>BcMath\Number::powmod</refname>
5+
<refpurpose>Raises an arbitrary precision number, reduced by a specified modulus</refpurpose>
6+
</refnamediv>
7+
8+
<refsect1 role="description">
9+
&reftitle.description;
10+
<methodsynopsis role="BcMath\\Number">
11+
<modifier>public</modifier> <type>BcMath\Number</type><methodname>BcMath\Number::powmod</methodname>
12+
<methodparam><type class="union"><type>BcMath\Number</type><type>string</type><type>int</type></type><parameter>exponent</parameter></methodparam>
13+
<methodparam><type class="union"><type>BcMath\Number</type><type>string</type><type>int</type></type><parameter>modulus</parameter></methodparam>
14+
<methodparam choice="opt"><type class="union"><type>int</type><type>null</type></type><parameter>scale</parameter><initializer>&null;</initializer></methodparam>
15+
</methodsynopsis>
16+
<simpara>
17+
Use the fast-exponentiation method to raise this object to the power
18+
<parameter>exponent</parameter> with respect to the modulus <parameter>
19+
modulus</parameter>.
20+
</simpara>
21+
</refsect1>
22+
23+
<refsect1 role="parameters">
24+
&reftitle.parameters;
25+
<variablelist>
26+
<varlistentry>
27+
<term><parameter>exponent</parameter></term>
28+
<listitem>
29+
<simpara>
30+
The exponent, as an non-negative and integral (i.e. the scale has to be zero).
31+
</simpara>
32+
</listitem>
33+
</varlistentry>
34+
<varlistentry>
35+
<term><parameter>modulus</parameter></term>
36+
<listitem>
37+
<simpara>
38+
The modulus, as an integral (i.e. the scale has to be zero).
39+
</simpara>
40+
</listitem>
41+
</varlistentry>
42+
&bc.number.scale.description;
43+
</variablelist>
44+
</refsect1>
45+
46+
<refsect1 role="returnvalues">
47+
&reftitle.returnvalues;
48+
<simpara>
49+
Returns the result as a new <classname>BcMath\Number</classname> object.
50+
</simpara>
51+
</refsect1>
52+
53+
<refsect1 role="errors">
54+
&reftitle.errors;
55+
<para>
56+
This method throws a <exceptionname>ValueError</exceptionname> in the following cases:
57+
<simplelist>
58+
<member><parameter>exponent</parameter> or <parameter>modulus</parameter> is <type>string</type> and not
59+
a well-formed BCMath numeric string</member>
60+
<member>This object, <parameter>exponent</parameter> or <parameter>modulus</parameter> has a fractional part</member>
61+
<member><parameter>exponent</parameter> is a negative value</member>
62+
<member><parameter>scale</parameter> is outside the valid range</member>
63+
</simplelist>
64+
</para>
65+
<simpara>
66+
This method throws a <exceptionname>DivisionByZeroError</exceptionname> exception if <parameter>modulus</parameter>
67+
is <literal>0</literal>.
68+
</simpara>
69+
</refsect1>
70+
71+
<refsect1 role="bc.autoscale">
72+
<!-- auto scale title -->
73+
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('bcmath-number.add')/db:refsect1[@role='bc.autoscale']/db:title)" />
74+
<simpara>
75+
When the <property>BcMath\Number::scale</property> of the result object is automatically set,
76+
the <property>BcMath\Number::scale</property> of the result object will always be <literal>0</literal>.
77+
</simpara>
78+
</refsect1>
79+
80+
<refsect1 role="examples">
81+
&reftitle.examples;
82+
<example>
83+
<title><methodname>BcMath\Number::powmod</methodname> example when <parameter>scale</parameter> is not specified</title>
84+
<programlisting role="php">
85+
<![CDATA[
86+
<?php
87+
var_dump(
88+
new BcMath\Number('8')->powmod(new BcMath\Number('3'), 5),
89+
new BcMath\Number('-8')->powmod(new BcMath\Number('3'), 5),
90+
new BcMath\Number('8')->powmod('2', -3),
91+
new BcMath\Number('-8')->powmod(5, 7),
92+
);
93+
?>
94+
]]>
95+
</programlisting>
96+
&example.outputs;
97+
<screen>
98+
<![CDATA[
99+
object(BcMath\Number)#3 (2) {
100+
["value"]=>
101+
string(1) "2"
102+
["scale"]=>
103+
int(0)
104+
}
105+
object(BcMath\Number)#4 (2) {
106+
["value"]=>
107+
string(2) "-2"
108+
["scale"]=>
109+
int(0)
110+
}
111+
object(BcMath\Number)#2 (2) {
112+
["value"]=>
113+
string(1) "1"
114+
["scale"]=>
115+
int(0)
116+
}
117+
object(BcMath\Number)#5 (2) {
118+
["value"]=>
119+
string(2) "-1"
120+
["scale"]=>
121+
int(0)
122+
}
123+
]]>
124+
</screen>
125+
</example>
126+
127+
<example>
128+
<title><methodname>BcMath\Number::powmod</methodname> example of explicitly specifying <parameter>scale</parameter></title>
129+
<programlisting role="php">
130+
<![CDATA[
131+
<?php
132+
var_dump(
133+
new BcMath\Number('8')->powmod(new BcMath\Number('3'), 5, 1),
134+
new BcMath\Number('-8')->powmod(new BcMath\Number('3'), 5, 2),
135+
new BcMath\Number('8')->powmod('2', -3, 3),
136+
new BcMath\Number('-8')->powmod(5, 7, 4),
137+
);
138+
?>
139+
]]>
140+
</programlisting>
141+
&example.outputs;
142+
<screen>
143+
<![CDATA[
144+
object(BcMath\Number)#3 (2) {
145+
["value"]=>
146+
string(3) "2.0"
147+
["scale"]=>
148+
int(1)
149+
}
150+
object(BcMath\Number)#4 (2) {
151+
["value"]=>
152+
string(5) "-2.00"
153+
["scale"]=>
154+
int(2)
155+
}
156+
object(BcMath\Number)#2 (2) {
157+
["value"]=>
158+
string(5) "1.000"
159+
["scale"]=>
160+
int(3)
161+
}
162+
object(BcMath\Number)#5 (2) {
163+
["value"]=>
164+
string(7) "-1.0000"
165+
["scale"]=>
166+
int(4)
167+
}
168+
]]>
169+
</screen>
170+
</example>
171+
</refsect1>
172+
173+
<refsect1 role="seealso">
174+
&reftitle.seealso;
175+
<simplelist>
176+
<member><function>bcpowmod</function></member>
177+
<member><methodname>BcMath\Number::pow</methodname></member>
178+
<member><methodname>BcMath\Number::mod</methodname></member>
179+
</simplelist>
180+
</refsect1>
181+
182+
</refentry>
183+
<!-- Keep this comment at the end of the file
184+
Local variables:
185+
mode: sgml
186+
sgml-omittag:t
187+
sgml-shorttag:t
188+
sgml-minimize-attributes:nil
189+
sgml-always-quote-attributes:t
190+
sgml-indent-step:1
191+
sgml-indent-data:t
192+
indent-tabs-mode:nil
193+
sgml-parent-document:nil
194+
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
195+
sgml-exposed-tags:nil
196+
sgml-local-catalogs:nil
197+
sgml-local-ecat-files:nil
198+
End:
199+
vim600: syn=xml fen fdm=syntax fdl=2 si
200+
vim: et tw=78 syn=sgml
201+
vi: ts=1 sw=1
202+
-->

reference/bc/functions/bcpowmod.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ $b = bcmod(bcpow($x, $y), $mod);
125125
<simplelist>
126126
<member><function>bcpow</function></member>
127127
<member><function>bcmod</function></member>
128+
<member><methodname>BcMath\Number::powmod</methodname></member>
128129
</simplelist>
129130
</para>
130131
</refsect1>

0 commit comments

Comments
 (0)