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

📄 bigint.html

📁 perl教程
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<dd>
<p>Scalars holding numbers may also be passed, but note that non-integer numbers
may already have lost precision due to the conversation to float. Quote
your input if you want BigInt to see all the digits:</p>
</dd>
<dd>
<pre>
        <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="number">12345678890123456789</span><span class="operator">);</span>   <span class="comment"># bad</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="string">'12345678901234567890'</span><span class="operator">);</span> <span class="comment"># good</span>
</pre>
</dd>
<dd>
<p>You can include one underscore between any two digits.</p>
</dd>
<dd>
<p>This means integer values like 1.01E2 or even 1000E-2 are also accepted.
Non-integer values result in NaN.</p>
</dd>
<dd>
<p>Currently, Math::BigInt::new() defaults to 0, while Math::BigInt::new('')
results in 'NaN'. This might change in the future, so use always the following
explicit forms to get a zero or NaN:</p>
</dd>
<dd>
<pre>
        <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="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>
</pre>
</dd>
<dd>
<p><code>bnorm()</code> on a BigInt object is now effectively a no-op, since the numbers 
are always stored in normalized form. If passed a string, creates a BigInt 
object from the input.</p>
</dd>
</li>
<dt><strong><a name="item_output">Output</a></strong>

<dd>
<p>Output values are BigInt objects (normalized), except for the methods which
return a string (see <em>SYNOPSIS</em>).</p>
</dd>
<dd>
<p>Some routines (<code>is_odd()</code>, <code>is_even()</code>, <code>is_zero()</code>, <code>is_one()</code>,
<code>is_nan()</code>, etc.) return true or false, while others (<code>bcmp()</code>, <code>bacmp()</code>)
return either undef (if NaN is involved), &lt;0, 0 or &gt;0 and are suited for sort.</p>
</dd>
</li>
</dl>
<p>
</p>
<hr />
<h1><a name="methods">METHODS</a></h1>
<p>Each of the methods below (except config(), <code>accuracy()</code> and <code>precision())</code>
accepts three additional parameters. These arguments <code>$A</code>, <code>$P</code> and <code>$R</code>
are <code>accuracy</code>, <code>precision</code> and <code>round_mode</code>. Please see the section about
<a href="#accuracy_and_precision">ACCURACY and PRECISION</a> for more information.</p>
<p>
</p>
<h2><a name="config">config</a></h2>
<pre>
        <span class="keyword">use</span> <span class="variable">Data::Dumper</span><span class="operator">;</span>
</pre>
<pre>
        <span class="keyword">print</span> <span class="variable">Dumper</span> <span class="operator">(</span> <span class="variable">Math::BigInt</span><span class="operator">-&gt;</span><span class="variable">config</span><span class="operator">()</span> <span class="operator">);</span>
        <span class="keyword">print</span> <span class="variable">Math::BigInt</span><span class="operator">-&gt;</span><span class="variable">config</span><span class="operator">()-&gt;</span><span class="operator">{</span><span class="string">lib</span><span class="operator">}</span><span class="operator">,</span><span class="string">"\n"</span><span class="operator">;</span>
</pre>
<p>Returns a hash containing the configuration, e.g. the version number, lib
loaded etc. The following hash keys are currently filled in with the
appropriate information.</p>
<pre>
        key             Description
                        Example
        ============================================================
        lib             Name of the low-level math library
                        Math::BigInt::Calc
        lib_version     Version of low-level math library (see 'lib')
                        0.30
        class           The class name of config() you just called
                        Math::BigInt
        upgrade         To which class math operations might be upgraded
                        Math::BigFloat
        downgrade       To which class math operations might be downgraded
                        undef
        precision       Global precision
                        undef
        accuracy        Global accuracy
                        undef
        round_mode      Global round mode
                        even
        version         version number of the class you used
                        1.61
        div_scale       Fallback acccuracy for div
                        40
        trap_nan        If true, traps creation of NaN via croak()
                        1
        trap_inf        If true, traps creation of +inf/-inf via croak()
                        1</pre>
<p>The following values can be set by passing <code>config()</code> a reference to a hash:</p>
<pre>
        trap_inf trap_nan
        upgrade downgrade precision accuracy round_mode div_scale</pre>
<p>Example:</p>
<pre>

        <span class="variable">$new_cfg</span> <span class="operator">=</span> <span class="variable">Math::BigInt</span><span class="operator">-&gt;</span><span class="variable">config</span><span class="operator">(</span> <span class="operator">{</span> <span class="string">trap_inf</span> <span class="operator">=&gt;</span> <span class="number">1</span><span class="operator">,</span> <span class="string">precision</span> <span class="operator">=&gt;</span> <span class="number">5</span> <span class="operator">}</span> <span class="operator">);</span>
</pre>
<p>
</p>
<h2><a name="accuracy">accuracy</a></h2>
<pre>
        <span class="variable">$x</span><span class="operator">-&gt;</span><span class="variable">accuracy</span><span class="operator">(</span><span class="number">5</span><span class="operator">);</span>                <span class="comment"># local for $x</span>
        <span class="variable">CLASS</span><span class="operator">-&gt;</span><span class="variable">accuracy</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"># Note: This also applies to new()!</span>
</pre>
<pre>
        <span class="variable">$A</span> <span class="operator">=</span> <span class="variable">$x</span><span class="operator">-&gt;</span><span class="variable">accuracy</span><span class="operator">();</span>            <span class="comment"># read out accuracy that affects $x</span>
        <span class="variable">$A</span> <span class="operator">=</span> <span class="variable">CLASS</span><span class="operator">-&gt;</span><span class="variable">accuracy</span><span class="operator">();</span>         <span class="comment"># read out global accuracy</span>
</pre>
<p>Set or get the global or local accuracy, aka how many significant digits the
results have. If you set a global accuracy, then this also applies to new()!</p>
<p>Warning! The accuracy <em>sticks</em>, e.g. once you created a number under the
influence of <code>CLASS-&gt;accuracy($A)</code>, all results from math operations with
that number will also be rounded.</p>
<p>In most cases, you should probably round the results explicitely using one of
<em>round()</em>, <em>bround()</em> or <em>bfround()</em> or by passing the desired accuracy
to the math operation as additional parameter:</p>
<pre>
        <span class="keyword">my</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="number">30000</span><span class="operator">);</span>
        <span class="keyword">my</span> <span class="variable">$y</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="number">7</span><span class="operator">);</span>
        <span class="keyword">print</span> <span class="keyword">scalar</span> <span class="variable">$x</span><span class="operator">-&gt;</span><span class="variable">copy</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="number">2</span><span class="operator">);</span>           <span class="comment"># print 4300</span>
        <span class="keyword">print</span> <span class="keyword">scalar</span> <span class="variable">$x</span><span class="operator">-&gt;</span><span class="variable">copy</span><span class="operator">()-&gt;</span><span class="variable">bdiv</span><span class="operator">(</span><span class="variable">$y</span><span class="operator">)-&gt;</span><span class="variable">bround</span><span class="operator">(</span><span class="number">2</span><span class="operator">);</span>   <span class="comment"># print 4300</span>
</pre>
<p>Please see the section about <a href="#accuracy_and_precision">ACCURACY AND PRECISION</a> for further details.</p>
<p>Value must be greater than zero. Pass an undef value to disable it:</p>
<pre>
        <span class="variable">$x</span><span class="operator">-&gt;</span><span class="variable">accuracy</span><span class="operator">(</span><span class="keyword">undef</span><span class="operator">);</span>
        <span class="variable">Math::BigInt</span><span class="operator">-&gt;</span><span class="variable">accuracy</span><span class="operator">(</span><span class="keyword">undef</span><span class="operator">);</span>
</pre>
<p>Returns the current accuracy. For <code>$x-</code>accuracy()&gt; it will return either the
local accuracy, or if not defined, the global. This means the return value
represents the accuracy 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">-&gt;</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">-&gt;</span><span class="variable">accuracy</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">-&gt;</span><span class="variable">new</span><span class="operator">(</span><span class="number">123456</span><span class="operator">);</span>         <span class="comment"># $x will be automatically rounded!</span>
        <span class="keyword">print</span> <span class="string">"$x $y\n"</span><span class="operator">;</span>                        <span class="comment"># '123500 1234567'</span>
        <span class="keyword">print</span> <span class="variable">$x</span><span class="operator">-&gt;</span><span class="variable">accuracy</span><span class="operator">(),</span><span class="string">"\n"</span><span class="operator">;</span>              <span class="comment"># will be 4</span>
        <span class="keyword">print</span> <span class="variable">$y</span><span class="operator">-&gt;</span><span class="variable">accuracy</span><span class="operator">(),</span><span class="string">"\n"</span><span class="operator">;</span>              <span class="comment"># also 4, since global is 4</span>
        <span class="keyword">print</span> <span class="variable">Math::BigInt</span><span class="operator">-&gt;</span><span class="variable">accuracy</span><span class="operator">(</span><span class="number">5</span><span class="operator">),</span><span class="string">"\n"</span><span class="operator">;</span>   <span class="comment"># set to 5, print 5</span>
        <span class="keyword">print</span> <span class="variable">$x</span><span class="operator">-&gt;</span><span class="variable">accuracy</span><span class="operator">(),</span><span class="string">"\n"</span><span class="operator">;</span>              <span class="comment"># still 4</span>
        <span class="keyword">print</span> <span class="variable">$y</span><span class="operator">-&gt;</span><span class="variable">accuracy</span><span class="operator">(),</span><span class="string">"\n"</span><span class="operator">;</span>              <span class="comment"># 5, since global is 5</span>
</pre>
<p>Note: Works also for subclasses like Math::BigFloat. Each class has it's 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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -