📄 bigint.html
字号:
<span class="comment"># Number creation </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="variable">$str</span><span class="operator">);</span> <span class="comment"># defaults to 0</span>
<span class="variable">$y</span> <span class="operator">=</span> <span class="variable">$x</span><span class="operator">-></span><span class="variable">copy</span><span class="operator">();</span> <span class="comment"># make a true copy</span>
<span class="variable">$nan</span> <span class="operator">=</span> <span class="variable">Math::BigInt</span><span class="operator">-></span><span class="variable">bnan</span><span class="operator">();</span> <span class="comment"># create a NotANumber</span>
<span class="variable">$zero</span> <span class="operator">=</span> <span class="variable">Math::BigInt</span><span class="operator">-></span><span class="variable">bzero</span><span class="operator">();</span> <span class="comment"># create a +0</span>
<span class="variable">$inf</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="comment"># create a +inf</span>
<span class="variable">$inf</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="string">'-'</span><span class="operator">);</span> <span class="comment"># create a -inf</span>
<span class="variable">$one</span> <span class="operator">=</span> <span class="variable">Math::BigInt</span><span class="operator">-></span><span class="variable">bone</span><span class="operator">();</span> <span class="comment"># create a +1</span>
<span class="variable">$one</span> <span class="operator">=</span> <span class="variable">Math::BigInt</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"># create a -1</span>
</pre>
<pre>
<span class="comment"># Testing (don't modify their arguments)</span>
<span class="comment"># (return true if the condition is met, otherwise false)</span>
</pre>
<pre>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">is_zero</span><span class="operator">();</span> <span class="comment"># if $x 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"># if $x 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"># if $x 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"># if $x is -1</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">is_odd</span><span class="operator">();</span> <span class="comment"># if $x is odd</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">is_even</span><span class="operator">();</span> <span class="comment"># if $x is even</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">is_pos</span><span class="operator">();</span> <span class="comment"># if $x >= 0</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">is_neg</span><span class="operator">();</span> <span class="comment"># if $x < 0</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">is_inf</span><span class="operator">(</span><span class="variable">$sign</span><span class="operator">);</span> <span class="comment"># if $x is +inf, or -inf (sign is default '+')</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">is_int</span><span class="operator">();</span> <span class="comment"># if $x is an integer (not a float)</span>
</pre>
<pre>
<span class="comment"># comparing and digit/sign extration</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">bcmp</span><span class="operator">(</span><span class="variable">$y</span><span class="operator">);</span> <span class="comment"># compare numbers (undef,<0,=0,>0)</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">bacmp</span><span class="operator">(</span><span class="variable">$y</span><span class="operator">);</span> <span class="comment"># compare absolutely (undef,<0,=0,>0)</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">sign</span><span class="operator">();</span> <span class="comment"># return the sign, either +,- or NaN</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">digit</span><span class="operator">(</span><span class="variable">$n</span><span class="operator">);</span> <span class="comment"># return the nth digit, counting from right</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">digit</span><span class="operator">(-</span><span class="variable">$n</span><span class="operator">);</span> <span class="comment"># return the nth digit, counting from left</span>
</pre>
<pre>
<span class="comment"># The following all modify their first argument. If you want to preserve</span>
<span class="comment"># $x, use $z = $x->copy()->bXXX($y); See under L<CAVEATS> for why this is</span>
<span class="comment"># neccessary when mixing $a = $b assigments with non-overloaded math.</span>
</pre>
<pre>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">bzero</span><span class="operator">();</span> <span class="comment"># set $x to 0</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">bnan</span><span class="operator">();</span> <span class="comment"># set $x to NaN</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">bone</span><span class="operator">();</span> <span class="comment"># set $x to +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"># set $x to -1</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">binf</span><span class="operator">();</span> <span class="comment"># set $x to inf</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> <span class="comment"># set $x to -inf</span>
</pre>
<pre>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">bneg</span><span class="operator">();</span> <span class="comment"># negation</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">babs</span><span class="operator">();</span> <span class="comment"># absolute value</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">bnorm</span><span class="operator">();</span> <span class="comment"># normalize (no-op in BigInt)</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">bnot</span><span class="operator">();</span> <span class="comment"># two's complement (bit wise not)</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">binc</span><span class="operator">();</span> <span class="comment"># increment $x by 1</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">bdec</span><span class="operator">();</span> <span class="comment"># decrement $x by 1</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">badd</span><span class="operator">(</span><span class="variable">$y</span><span class="operator">);</span> <span class="comment"># addition (add $y to $x)</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">bsub</span><span class="operator">(</span><span class="variable">$y</span><span class="operator">);</span> <span class="comment"># subtraction (subtract $y from $x)</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">bmul</span><span class="operator">(</span><span class="variable">$y</span><span class="operator">);</span> <span class="comment"># multiplication (multiply $x by $y)</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">bdiv</span><span class="operator">(</span><span class="variable">$y</span><span class="operator">);</span> <span class="comment"># divide, set $x to quotient</span>
<span class="comment"># return (quo,rem) or quo if scalar</span>
</pre>
<pre>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">bmod</span><span class="operator">(</span><span class="variable">$y</span><span class="operator">);</span> <span class="comment"># modulus (x % y)</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">bmodpow</span><span class="operator">(</span><span class="variable">$exp</span><span class="operator">,</span><span class="variable">$mod</span><span class="operator">);</span> <span class="comment"># modular exponentation (($num**$exp) % $mod))</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">bmodinv</span><span class="operator">(</span><span class="variable">$mod</span><span class="operator">);</span> <span class="comment"># the inverse of $x in the given modulus $mod</span>
</pre>
<pre>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">bpow</span><span class="operator">(</span><span class="variable">$y</span><span class="operator">);</span> <span class="comment"># power of arguments (x ** y)</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">blsft</span><span class="operator">(</span><span class="variable">$y</span><span class="operator">);</span> <span class="comment"># left shift</span>
<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="comment"># right shift </span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">blsft</span><span class="operator">(</span><span class="variable">$y</span><span class="operator">,</span><span class="variable">$n</span><span class="operator">);</span> <span class="comment"># left shift, by base $n (like 10)</span>
<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> <span class="comment"># right shift, by base $n (like 10)</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">band</span><span class="operator">(</span><span class="variable">$y</span><span class="operator">);</span> <span class="comment"># bitwise and</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">bior</span><span class="operator">(</span><span class="variable">$y</span><span class="operator">);</span> <span class="comment"># bitwise inclusive or</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">bxor</span><span class="operator">(</span><span class="variable">$y</span><span class="operator">);</span> <span class="comment"># bitwise exclusive or</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">bnot</span><span class="operator">();</span> <span class="comment"># bitwise not (two's complement)</span>
</pre>
<pre>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">bsqrt</span><span class="operator">();</span> <span class="comment"># calculate square-root</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">broot</span><span class="operator">(</span><span class="variable">$y</span><span class="operator">);</span> <span class="comment"># $y'th root of $x (e.g. $y == 3 => cubic root)</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">bfac</span><span class="operator">();</span> <span class="comment"># factorial of $x (1*2*3*4*..$x)</span>
</pre>
<pre>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">round</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">$mode</span><span class="operator">);</span> <span class="comment"># round to accuracy or precision using mode $mode</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">bround</span><span class="operator">(</span><span class="variable">$n</span><span class="operator">);</span> <span class="comment"># accuracy: preserve $n digits</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">bfround</span><span class="operator">(</span><span class="variable">$n</span><span class="operator">);</span> <span class="comment"># round to $nth digit, no-op for BigInts</span>
</pre>
<pre>
<span class="comment"># The following do not modify their arguments in BigInt (are no-ops),</span>
<span class="comment"># but do so in BigFloat:</span>
</pre>
<pre>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">bfloor</span><span class="operator">();</span> <span class="comment"># return integer less or equal than $x</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">bceil</span><span class="operator">();</span> <span class="comment"># return integer greater or equal than $x</span>
<span class="comment"># The following do not modify their arguments:</span>
</pre>
<pre>
<span class="comment"># greatest common divisor (no OO style)</span>
<span class="keyword">my</span> <span class="variable">$gcd</span> <span class="operator">=</span> <span class="variable">Math::BigInt::bgcd</span><span class="operator">(</span><span class="variable">@values</span><span class="operator">);</span>
<span class="comment"># lowest common multiplicator (no OO style)</span>
<span class="keyword">my</span> <span class="variable">$lcm</span> <span class="operator">=</span> <span class="variable">Math::BigInt::blcm</span><span class="operator">(</span><span class="variable">@values</span><span class="operator">);</span>
<span class="variable">$x</span><span class="operator">-></span><span class="keyword">length</span><span class="operator">();</span> <span class="comment"># return number of digits in number</span>
<span class="operator">(</span><span class="variable">$xl</span><span class="operator">,</span><span class="variable">$f</span><span class="operator">)</span> <span class="operator">=</span> <span class="variable">$x</span><span class="operator">-></span><span class="keyword">length</span><span class="operator">();</span> <span class="comment"># length of number and length of fraction part,</span>
<span class="comment"># latter is always 0 digits long for BigInts</span>
</pre>
<pre>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">exponent</span><span class="operator">();</span> <span class="comment"># return exponent as BigInt</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">mantissa</span><span class="operator">();</span> <span class="comment"># return (signed) mantissa as BigInt</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">parts</span><span class="operator">();</span> <span class="comment"># return (mantissa,exponent) as BigInt</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">copy</span><span class="operator">();</span> <span class="comment"># make a true copy of $x (unlike $y = $x;)</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">as_int</span><span class="operator">();</span> <span class="comment"># return as BigInt (in BigInt: same as copy())</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">numify</span><span class="operator">();</span> <span class="comment"># return as scalar (might overflow!)</span>
<span class="comment"># conversation to string (do not modify their argument)</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">bstr</span><span class="operator">();</span> <span class="comment"># normalized string (e.g. '3')</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">bsstr</span><span class="operator">();</span> <span class="comment"># norm. string in scientific notation (e.g. '3E0')</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">as_hex</span><span class="operator">();</span> <span class="comment"># as signed hexadecimal string with prefixed 0x</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">as_bin</span><span class="operator">();</span> <span class="comment"># as signed binary string with prefixed 0b</span>
</pre>
<pre>
<span class="comment"># precision and accuracy (see section about rounding for more)</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">precision</span><span class="operator">();</span> <span class="comment"># return P of $x (or global, if P of $x undef)</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">precision</span><span class="operator">(</span><span class="variable">$n</span><span class="operator">);</span> <span class="comment"># set P of $x to $n</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">accuracy</span><span class="operator">();</span> <span class="comment"># return A of $x (or global, if A of $x undef)</span>
<span class="variable">$x</span><span class="operator">-></span><span class="variable">accuracy</span><span class="operator">(</span><span class="variable">$n</span><span class="operator">);</span> <span class="comment"># set A $x to $n</span>
</pre>
<pre>
<span class="comment"># Global methods</span>
<span class="variable">Math::BigInt</span><span class="operator">-></span><span class="variable">precision</span><span class="operator">();</span> <span class="comment"># get/set global P for all BigInt objects</span>
<span class="variable">Math::BigInt</span><span class="operator">-></span><span class="variable">accuracy</span><span class="operator">();</span> <span class="comment"># get/set global A for all BigInt objects</span>
<span class="variable">Math::BigInt</span><span class="operator">-></span><span class="variable">round_mode</span><span class="operator">();</span> <span class="comment"># get/set global round mode, one of</span>
<span class="comment"># 'even', 'odd', '+inf', '-inf', 'zero' or 'trunc'</span>
<span class="variable">Math::BigInt</span><span class="operator">-></span><span class="variable">config</span><span class="operator">();</span> <span class="comment"># return hash containing configuration</span>
</pre>
<p>
</p>
<hr />
<h1><a name="description">DESCRIPTION</a></h1>
<p>All operators (inlcuding basic math operations) are overloaded if you
declare your big integers as</p>
<pre>
<span class="variable">$i</span> <span class="operator">=</span> <span class="variable">new</span> <span class="variable">Math::BigInt</span> <span class="string">'123_456_789_123_456_789'</span><span class="operator">;</span>
</pre>
<p>Operations with overloaded operators preserve the arguments which is
exactly what you expect.</p>
<dl>
<dt><strong><a name="item_input">Input</a></strong>
<dd>
<p>Input values to these routines may be any string, that looks like a number
and results in an integer, including hexadecimal and binary numbers.</p>
</dd>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -