⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bigint.html

📁 perl教程
💻 HTML
📖 第 1 页 / 共 5 页
字号:
  <span class="comment"># Number creation     </span>
  <span class="variable">$x</span> <span class="operator">=</span> <span class="variable">Math::BigInt</span><span class="operator">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</span><span class="variable">is_pos</span><span class="operator">();</span>         <span class="comment"># if $x &gt;= 0</span>
  <span class="variable">$x</span><span class="operator">-&gt;</span><span class="variable">is_neg</span><span class="operator">();</span>         <span class="comment"># if $x &lt;  0</span>
  <span class="variable">$x</span><span class="operator">-&gt;</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">-&gt;</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">-&gt;</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,&lt;0,=0,&gt;0)</span>
  <span class="variable">$x</span><span class="operator">-&gt;</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,&lt;0,=0,&gt;0)</span>
  <span class="variable">$x</span><span class="operator">-&gt;</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">-&gt;</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">-&gt;</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-&gt;copy()-&gt;bXXX($y); See under L&lt;CAVEATS&gt; 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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</span><span class="variable">bneg</span><span class="operator">();</span>           <span class="comment"># negation</span>
  <span class="variable">$x</span><span class="operator">-&gt;</span><span class="variable">babs</span><span class="operator">();</span>           <span class="comment"># absolute value</span>
  <span class="variable">$x</span><span class="operator">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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 =&gt; cubic root)</span>
  <span class="variable">$x</span><span class="operator">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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 + -