📄 bigint.html
字号:
Math::BigInt.</p>
<p>
</p>
<h2><a name="precision">precision</a></h2>
<pre>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">precision</span><span class="operator">(-</span><span class="number">2</span><span class="operator">);</span> <span class="comment"># local for $x, round at the second digit right of the dot</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">precision</span><span class="operator">(</span><span class="number">2</span><span class="operator">);</span> <span class="comment"># ditto, round at the second digit left of the dot</span>
</pre>
<pre>
<span class="variable">CLASS</span><span class="operator">-></span><span class="variable">precision</span><span class="operator">(</span><span class="number">5</span><span class="operator">);</span> <span class="comment"># Global for all members of CLASS</span>
<span class="comment"># This also applies to new()!</span>
<span class="variable">CLASS</span><span class="operator">-></span><span class="variable">precision</span><span class="operator">(-</span><span class="number">5</span><span class="operator">);</span> <span class="comment"># ditto</span>
</pre>
<pre>
<span class="variable">$P</span> <span class="operator">=</span> <span class="variable">CLASS</span><span class="operator">-></span><span class="variable">precision</span><span class="operator">();</span> <span class="comment"># read out global precision </span>
<span class="variable">$P</span> <span class="operator">=</span> <span class="variable">$x</span><span class="operator">-></span><span class="variable">precision</span><span class="operator">();</span> <span class="comment"># read out precision that affects $x</span>
</pre>
<p>Note: You probably want to use <em>accuracy()</em> instead. With <a href="#accuracy">the accuracy manpage</a> you
set the number of digits each result should have, with <a href="#precision">the precision manpage</a> you
set the place where to round!</p>
<p><code>precision()</code> sets or gets the global or local precision, aka at which digit
before or after the dot to round all results. A set global precision also
applies to all newly created numbers!</p>
<p>In Math::BigInt, passing a negative number precision has no effect since no
numbers have digits after the dot. In <a href="../../lib/Math/BigFloat.html">the Math::BigFloat manpage</a>, it will round all
results to P digits after the dot.</p>
<p>Please see the section about <a href="#accuracy_and_precision">ACCURACY AND PRECISION</a> for further details.</p>
<p>Pass an undef value to disable it:</p>
<pre>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">precision</span><span class="operator">(</span><span class="keyword">undef</span><span class="operator">);</span>
<span class="variable">Math::BigInt</span><span class="operator">-></span><span class="variable">precision</span><span class="operator">(</span><span class="keyword">undef</span><span class="operator">);</span>
</pre>
<p>Returns the current precision. For <code>$x-</code>precision()> it will return either the
local precision of $x, or if not defined, the global. This means the return
value represents the prevision that will be in effect for $x:</p>
<pre>
<span class="variable">$y</span> <span class="operator">=</span> <span class="variable">Math::BigInt</span><span class="operator">-></span><span class="variable">new</span><span class="operator">(</span><span class="number">1234567</span><span class="operator">);</span> <span class="comment"># unrounded</span>
<span class="keyword">print</span> <span class="variable">Math::BigInt</span><span class="operator">-></span><span class="variable">precision</span><span class="operator">(</span><span class="number">4</span><span class="operator">),</span><span class="string">"\n"</span><span class="operator">;</span> <span class="comment"># set 4, print 4</span>
<span class="variable">$x</span> <span class="operator">=</span> <span class="variable">Math::BigInt</span><span class="operator">-></span><span class="variable">new</span><span class="operator">(</span><span class="number">123456</span><span class="operator">);</span> <span class="comment"># will be automatically rounded</span>
<span class="keyword">print</span> <span class="variable">$x</span><span class="operator">;</span> <span class="comment"># print "120000"!</span>
</pre>
<p>Note: Works also for subclasses like <a href="../../lib/Math/BigFloat.html">the Math::BigFloat manpage</a>. Each class has its
own globals separated from Math::BigInt, but it is possible to subclass
Math::BigInt and make the globals of the subclass aliases to the ones from
Math::BigInt.</p>
<p>
</p>
<h2><a name="brsft">brsft</a></h2>
<pre>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">brsft</span><span class="operator">(</span><span class="variable">$y</span><span class="operator">,</span><span class="variable">$n</span><span class="operator">);</span>
</pre>
<p>Shifts $x right by $y in base $n. Default is base 2, used are usually 10 and
2, but others work, too.</p>
<p>Right shifting usually amounts to dividing $x by $n ** $y and truncating the
result:</p>
<pre>
<span class="variable">$x</span> <span class="operator">=</span> <span class="variable">Math::BigInt</span><span class="operator">-></span><span class="variable">new</span><span class="operator">(</span><span class="number">10</span><span class="operator">);</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">brsft</span><span class="operator">(</span><span class="number">1</span><span class="operator">);</span> <span class="comment"># same as $x >> 1: 5</span>
<span class="variable">$x</span> <span class="operator">=</span> <span class="variable">Math::BigInt</span><span class="operator">-></span><span class="variable">new</span><span class="operator">(</span><span class="number">1234</span><span class="operator">);</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">brsft</span><span class="operator">(</span><span class="number">2</span><span class="operator">,</span><span class="number">10</span><span class="operator">);</span> <span class="comment"># result 12</span>
</pre>
<p>There is one exception, and that is base 2 with negative $x:</p>
<pre>
<span class="variable">$x</span> <span class="operator">=</span> <span class="variable">Math::BigInt</span><span class="operator">-></span><span class="variable">new</span><span class="operator">(-</span><span class="number">5</span><span class="operator">);</span>
<span class="keyword">print</span> <span class="variable">$x</span><span class="operator">-></span><span class="variable">brsft</span><span class="operator">(</span><span class="number">1</span><span class="operator">);</span>
</pre>
<p>This will print -3, not -2 (as it would if you divide -5 by 2 and truncate the
result).</p>
<p>
</p>
<h2><a name="new">new</a></h2>
<pre>
<span class="variable">$x</span> <span class="operator">=</span> <span class="variable">Math::BigInt</span><span class="operator">-></span><span class="variable">new</span><span class="operator">(</span><span class="variable">$str</span><span class="operator">,</span><span class="variable">$A</span><span class="operator">,</span><span class="variable">$P</span><span class="operator">,</span><span class="variable">$R</span><span class="operator">);</span>
</pre>
<p>Creates a new BigInt object from a scalar or another BigInt object. The
input is accepted as decimal, hex (with leading '0x') or binary (with leading
'0b').</p>
<p>See <a href="#item_input">Input</a> for more info on accepted input formats.</p>
<p>
</p>
<h2><a name="bnan">bnan</a></h2>
<pre>
<span class="variable">$x</span> <span class="operator">=</span> <span class="variable">Math::BigInt</span><span class="operator">-></span><span class="variable">bnan</span><span class="operator">();</span>
</pre>
<p>Creates a new BigInt object representing NaN (Not A Number).
If used on an object, it will set it to NaN:</p>
<pre>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">bnan</span><span class="operator">();</span>
</pre>
<p>
</p>
<h2><a name="bzero">bzero</a></h2>
<pre>
<span class="variable">$x</span> <span class="operator">=</span> <span class="variable">Math::BigInt</span><span class="operator">-></span><span class="variable">bzero</span><span class="operator">();</span>
</pre>
<p>Creates a new BigInt object representing zero.
If used on an object, it will set it to zero:</p>
<pre>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">bzero</span><span class="operator">();</span>
</pre>
<p>
</p>
<h2><a name="binf">binf</a></h2>
<pre>
<span class="variable">$x</span> <span class="operator">=</span> <span class="variable">Math::BigInt</span><span class="operator">-></span><span class="variable">binf</span><span class="operator">(</span><span class="variable">$sign</span><span class="operator">);</span>
</pre>
<p>Creates a new BigInt object representing infinity. The optional argument is
either '-' or '+', indicating whether you want infinity or minus infinity.
If used on an object, it will set it to infinity:</p>
<pre>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">binf</span><span class="operator">();</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">binf</span><span class="operator">(</span><span class="string">'-'</span><span class="operator">);</span>
</pre>
<p>
</p>
<h2><a name="bone">bone</a></h2>
<pre>
<span class="variable">$x</span> <span class="operator">=</span> <span class="variable">Math::BigInt</span><span class="operator">-></span><span class="variable">binf</span><span class="operator">(</span><span class="variable">$sign</span><span class="operator">);</span>
</pre>
<p>Creates a new BigInt object representing one. The optional argument is
either '-' or '+', indicating whether you want one or minus one.
If used on an object, it will set it to one:</p>
<pre>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">bone</span><span class="operator">();</span> <span class="comment"># +1</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">bone</span><span class="operator">(</span><span class="string">'-'</span><span class="operator">);</span> <span class="comment"># -1</span>
</pre>
<p>
</p>
<h2><a name="is_one___is_zero___is_nan___is_inf__"><code>is_one()/is_zero()/is_nan()/is_inf()</code></a></h2>
<pre>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">is_zero</span><span class="operator">();</span> <span class="comment"># true if arg is +0</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">is_nan</span><span class="operator">();</span> <span class="comment"># true if arg is NaN</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">is_one</span><span class="operator">();</span> <span class="comment"># true if arg is +1</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">is_one</span><span class="operator">(</span><span class="string">'-'</span><span class="operator">);</span> <span class="comment"># true if arg is -1</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">is_inf</span><span class="operator">();</span> <span class="comment"># true if +inf</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">is_inf</span><span class="operator">(</span><span class="string">'-'</span><span class="operator">);</span> <span class="comment"># true if -inf (sign is default '+')</span>
</pre>
<p>These methods all test the BigInt for beeing one specific value and return
true or false depending on the input. These are faster than doing something
like:</p>
<pre>
if ($x == 0)</pre>
<p>
</p>
<h2><a name="is_pos___is_neg__"><code>is_pos()/is_neg()</code></a></h2>
<pre>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">is_pos</span><span class="operator">();</span> <span class="comment"># true if > 0</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">is_neg</span><span class="operator">();</span> <span class="comment"># true if < 0</span>
</pre>
<p>The methods return true if the argument is positive or negative, respectively.
<code>NaN</code> is neither positive nor negative, while <code>+inf</code> counts as positive, and
<code>-inf</code> is negative. A <code>zero</code> is neither positive nor negative.</p>
<p>These methods are only testing the sign, and not the value.</p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -