~ubuntu-branches/ubuntu/intrepid/perl-doc-html/intrepid

« back to all changes in this revision

Viewing changes to Math/BigFloat.html

  • Committer: Bazaar Package Importer
  • Author(s): Roberto C. Sanchez
  • Date: 2008-05-17 20:14:19 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20080517201419-qgbuogq2ckkdisyi
Tags: 5.10.0-2
Supersede botched upload of 5.10.0-1.

Show diffs side-by-side

added added

removed removed

Lines of Context:
54
54
      <h2>Links:</h2>
55
55
      <ul>
56
56
        <li><a href="http://search.cpan.org">CPAN</a></li>
 
57
        <li><a href="http://www.perl.org">Perl.org</a></li>
57
58
        <li><a href="http://www.perl.com">Perl.com</a></li>
58
 
        <li><a href="http://www.perl.org">Perl.org</a></li>
 
59
        <li><a href="http://perlbuzz.com">Perl Buzz</a></li>
 
60
        <li><a href="http://www.perlfoundation.org/perl5/index.cgi">Perl 5 Wiki</a></li>
 
61
        <li><a href="http://jobs.perl.org">Perl Jobs</a></li>
59
62
        <li><a href="http://www.pm.org">Perl Mongers</a></li>
60
63
        <li><a href="http://www.perlmonks.org">Perl Monks</a></li>
61
64
        <li><a href="http://planet.perl.org">Planet Perl</a></li>
65
68
      <ul>
66
69
        <li>Site maintained by<br><a href="http://perl.jonallen.info">Jon Allen</a>
67
70
            (<a href="http://perl.jonallen.info">JJ</a>)</li>
68
 
        <li class="spaced">Last updated on<br>23 April 2006</li>
 
71
        <li class="spaced">Last updated on<br>23 December 2007</li>
69
72
        <li class="spaced">See the <a href="http://perl.jonallen.info/projects/perldoc">project page</a> for
70
73
        more details</li>
71
74
      </ul>
76
79
    <div id="centerContent">
77
80
      <div id="contentHeader">
78
81
        <div id="contentHeaderLeft"><a href="#" onClick="showLeft()">Show navigation</a></div>
79
 
        <div id="contentHeaderCentre">-- Perl 5.8.8 documentation --</div>
 
82
        <div id="contentHeaderCentre">-- Perl 5.10.0 documentation --</div>
80
83
        <div id="contentHeaderRight"><a href="#" onClick="showRight()">Show toolbar</a></div>
81
84
      </div>
82
85
      <div id="breadCrumbs"><a href="../index.html">Home</a> &gt; <a href="../index-modules-A.html">Core modules</a> &gt; <a href="../index-modules-M.html">M</a> &gt; Math::BigFloat</div>
84
87
      <div id="contentBody"><div class="title_container"><div class="page_title">Math::BigFloat</div></div><ul><li><a href="#NAME">NAME</a><li><a href="#SYNOPSIS">SYNOPSIS</a><li><a href="#DESCRIPTION">DESCRIPTION</a><ul><li><a href="#Canonical-notation">Canonical notation</a><li><a href="#Output">Output</a><li><a href="#'mantissa()'%2c-'exponent()'-and-'parts()'"><code class="inline"><span class="i">mantissa</span><span class="s">(</span><span class="s">)</span></code>
85
88
, <code class="inline"><span class="i">exponent</span><span class="s">(</span><span class="s">)</span></code>
86
89
 and <code class="inline"><span class="i">parts</span><span class="s">(</span><span class="s">)</span></code>
87
 
</a><li><a href="#Accuracy-vs.-Precision">Accuracy vs. Precision</a><li><a href="#Rounding">Rounding</a></ul><li><a href="#METHODS">METHODS</a><ul><li><a href="#accuracy">accuracy</a><li><a href="#precision()">precision()</a></ul><li><a href="#Autocreating-constants">Autocreating constants</a><ul><li><a href="#Math-library">Math library</a><li><a href="#Using-Math%3a%3aBigInt%3a%3aLite">Using Math::BigInt::Lite</a></ul><li><a href="#BUGS">BUGS</a><li><a href="#CAVEATS">CAVEATS</a><li><a href="#SEE-ALSO">SEE ALSO</a><li><a href="#LICENSE">LICENSE</a><li><a href="#AUTHORS">AUTHORS</a></ul><a name="NAME"></a><h1>NAME</h1>
 
90
</a><li><a href="#Accuracy-vs.-Precision">Accuracy vs. Precision</a><li><a href="#Rounding">Rounding</a></ul><li><a href="#METHODS">METHODS</a><ul><li><a href="#accuracy">accuracy</a><li><a href="#precision()">precision()</a><li><a href="#bexp()">bexp()</a><li><a href="#bnok()">bnok()</a><li><a href="#bpi()">bpi()</a><li><a href="#bcos()">bcos()</a><li><a href="#bsin()">bsin()</a><li><a href="#batan2()">batan2()</a><li><a href="#batan()">batan()</a><li><a href="#bmuladd()">bmuladd()</a></ul><li><a href="#Autocreating-constants">Autocreating constants</a><ul><li><a href="#Math-library">Math library</a><li><a href="#Using-Math%3a%3aBigInt%3a%3aLite">Using Math::BigInt::Lite</a></ul><li><a href="#EXPORTS">EXPORTS</a><li><a href="#BUGS">BUGS</a><li><a href="#CAVEATS">CAVEATS</a><li><a href="#SEE-ALSO">SEE ALSO</a><li><a href="#LICENSE">LICENSE</a><li><a href="#AUTHORS">AUTHORS</a></ul><a name="NAME"></a><h1>NAME</h1>
88
91
<p>Math::BigFloat - Arbitrary size floating point math package</p>
89
92
<a name="SYNOPSIS"></a><h1>SYNOPSIS</h1>
90
 
<pre class="verbatim">  <a class="l_k" href="../functions/use.html">use</a> <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a><span class="sc">;</span></pre>
 
93
<pre class="verbatim">  <a class="l_k" href="../functions/use.html">use</a> <span class="w">Math::BigFloat</span><span class="sc">;</span></pre>
91
94
<pre class="verbatim">  <span class="c"># Number creation</span>
92
 
  <span class="i">$x</span> = <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a>-&gt;new<span class="s">(</span><span class="i">$str</span><span class="s">)</span><span class="sc">;</span>        <span class="c"># defaults to 0</span>
93
 
  <span class="i">$nan</span>  = <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a>-&gt;bnan<span class="s">(</span><span class="s">)</span><span class="sc">;</span>       <span class="c"># create a NotANumber</span>
94
 
  <span class="i">$zero</span> = <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a>-&gt;bzero<span class="s">(</span><span class="s">)</span><span class="sc">;</span>      <span class="c"># create a +0</span>
95
 
  <span class="i">$inf</span> = <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a>-&gt;binf<span class="s">(</span><span class="s">)</span><span class="sc">;</span>        <span class="c"># create a +inf</span>
96
 
  <span class="i">$inf</span> = <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a>-&gt;binf<span class="s">(</span><span class="q">&#39;-&#39;</span><span class="s">)</span><span class="sc">;</span>      <span class="c"># create a -inf</span>
97
 
  <span class="i">$one</span> = <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a>-&gt;bone<span class="s">(</span><span class="s">)</span><span class="sc">;</span>        <span class="c"># create a +1</span>
98
 
  <span class="i">$one</span> = <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a>-&gt;bone<span class="s">(</span><span class="q">&#39;-&#39;</span><span class="s">)</span><span class="sc">;</span>      <span class="c"># create a -1</span></pre>
 
95
  <a class="l_k" href="../functions/my.html">my</a> <span class="i">$x</span> = <span class="w">Math::BigFloat</span><span class="w">-&gt;new</span><span class="s">(</span><span class="i">$str</span><span class="s">)</span><span class="sc">;</span>        <span class="c"># defaults to 0</span>
 
96
  <a class="l_k" href="../functions/my.html">my</a> <span class="i">$y</span> = <span class="i">$x</span><span class="i">-&gt;copy</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>                      <span class="c"># make a true copy</span>
 
97
  <a class="l_k" href="../functions/my.html">my</a> <span class="i">$nan</span>  = <span class="w">Math::BigFloat</span><span class="w">-&gt;bnan</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>       <span class="c"># create a NotANumber</span>
 
98
  <a class="l_k" href="../functions/my.html">my</a> <span class="i">$zero</span> = <span class="w">Math::BigFloat</span><span class="w">-&gt;bzero</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>      <span class="c"># create a +0</span>
 
99
  <a class="l_k" href="../functions/my.html">my</a> <span class="i">$inf</span> = <span class="w">Math::BigFloat</span><span class="w">-&gt;binf</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>        <span class="c"># create a +inf</span>
 
100
  <a class="l_k" href="../functions/my.html">my</a> <span class="i">$inf</span> = <span class="w">Math::BigFloat</span><span class="w">-&gt;binf</span><span class="s">(</span><span class="q">'-'</span><span class="s">)</span><span class="sc">;</span>      <span class="c"># create a -inf</span>
 
101
  <a class="l_k" href="../functions/my.html">my</a> <span class="i">$one</span> = <span class="w">Math::BigFloat</span><span class="w">-&gt;bone</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>        <span class="c"># create a +1</span>
 
102
  <a class="l_k" href="../functions/my.html">my</a> <span class="i">$mone</span> = <span class="w">Math::BigFloat</span><span class="w">-&gt;bone</span><span class="s">(</span><span class="q">'-'</span><span class="s">)</span><span class="sc">;</span>     <span class="c"># create a -1</span></pre>
 
103
<pre class="verbatim">  <a class="l_k" href="../functions/my.html">my</a> <span class="i">$pi</span> = <span class="w">Math::BigFloat</span><span class="w">-&gt;bpi</span><span class="s">(</span><span class="n">100</span><span class="s">)</span><span class="sc">;</span>  <span class="c"># PI to 100 digits</span></pre>
 
104
<pre class="verbatim">  <span class="c"># the following examples compute their result to 100 digits accuracy:</span>
 
105
  <a class="l_k" href="../functions/my.html">my</a> <span class="i">$cos</span>  = <span class="w">Math::BigFloat</span><span class="w">-&gt;new</span><span class="s">(</span><span class="n">1</span><span class="s">)</span><span class="i">-&gt;bcos</span><span class="s">(</span><span class="n">100</span><span class="s">)</span><span class="sc">;</span>              <span class="c"># cosinus(1)</span>
 
106
  <a class="l_k" href="../functions/my.html">my</a> <span class="i">$sin</span>  = <span class="w">Math::BigFloat</span><span class="w">-&gt;new</span><span class="s">(</span><span class="n">1</span><span class="s">)</span><span class="i">-&gt;bsin</span><span class="s">(</span><span class="n">100</span><span class="s">)</span><span class="sc">;</span>              <span class="c"># sinus(1)</span>
 
107
  <a class="l_k" href="../functions/my.html">my</a> <span class="i">$atan</span> = <span class="w">Math::BigFloat</span><span class="w">-&gt;new</span><span class="s">(</span><span class="n">1</span><span class="s">)</span><span class="i">-&gt;batan</span><span class="s">(</span><span class="n">100</span><span class="s">)</span><span class="sc">;</span>     <span class="c"># arcus tangens(1)</span></pre>
 
108
<pre class="verbatim">  <a class="l_k" href="../functions/my.html">my</a> <span class="i">$atan2</span> = <span class="w">Math::BigFloat</span><span class="w">-&gt;new</span><span class="s">(</span>  <span class="n">1</span> <span class="s">)</span><span class="i">-&gt;batan2</span><span class="s">(</span> <span class="n">1</span> <span class="cm">,</span><span class="n">100</span><span class="s">)</span><span class="sc">;</span> <span class="c"># batan(1)</span>
 
109
  <a class="l_k" href="../functions/my.html">my</a> <span class="i">$atan2</span> = <span class="w">Math::BigFloat</span><span class="w">-&gt;new</span><span class="s">(</span>  <span class="n">1</span> <span class="s">)</span><span class="i">-&gt;batan2</span><span class="s">(</span> <span class="n">8</span> <span class="cm">,</span><span class="n">100</span><span class="s">)</span><span class="sc">;</span> <span class="c"># batan(1/8)</span>
 
110
  <a class="l_k" href="../functions/my.html">my</a> <span class="i">$atan2</span> = <span class="w">Math::BigFloat</span><span class="w">-&gt;new</span><span class="s">(</span> <span class="n">-2</span> <span class="s">)</span><span class="i">-&gt;batan2</span><span class="s">(</span> <span class="n">1</span> <span class="cm">,</span><span class="n">100</span><span class="s">)</span><span class="sc">;</span> <span class="c"># batan(-2)</span></pre>
99
111
<pre class="verbatim">  <span class="c"># Testing</span>
100
112
  <span class="i">$x</span><span class="i">-&gt;is_zero</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>         <span class="c"># true if arg is +0</span>
101
113
  <span class="i">$x</span><span class="i">-&gt;is_nan</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>                  <span class="c"># true if arg is NaN</span>
105
117
  <span class="i">$x</span><span class="i">-&gt;is_even</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>         <span class="c"># true if even, false for odd</span>
106
118
  <span class="i">$x</span><span class="i">-&gt;is_pos</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>                  <span class="c"># true if &gt;= 0</span>
107
119
  <span class="i">$x</span><span class="i">-&gt;is_neg</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>                  <span class="c"># true if &lt;  0</span>
108
 
  <span class="i">$x</span><span class="i">-&gt;is_inf</span><span class="s">(</span>sign<span class="s">)</span><span class="sc">;</span>              <span class="c"># true if +inf, or -inf (default is &#39;+&#39;)</span></pre>
 
120
  <span class="i">$x</span><span class="i">-&gt;is_inf</span><span class="s">(</span><span class="w">sign</span><span class="s">)</span><span class="sc">;</span>               <span class="c"># true if +inf, or -inf (default is &#39;+&#39;)</span></pre>
109
121
<pre class="verbatim">  <span class="i">$x</span><span class="i">-&gt;bcmp</span><span class="s">(</span><span class="i">$y</span><span class="s">)</span><span class="sc">;</span>                     <span class="c"># compare numbers (undef,&lt;0,=0,&gt;0)</span>
110
122
  <span class="i">$x</span><span class="i">-&gt;bacmp</span><span class="s">(</span><span class="i">$y</span><span class="s">)</span><span class="sc">;</span>          <span class="c"># compare absolutely (undef,&lt;0,=0,&gt;0)</span>
111
123
  <span class="i">$x</span><span class="i">-&gt;sign</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>                    <span class="c"># return the sign, either +,- or NaN</span>
112
124
  <span class="i">$x</span><span class="i">-&gt;digit</span><span class="s">(</span><span class="i">$n</span><span class="s">)</span><span class="sc">;</span>          <span class="c"># return the nth digit, counting from right</span>
113
 
  <span class="i">$x</span><span class="i">-&gt;digit</span><span class="s">(</span>-<span class="i">$n</span><span class="s">)</span><span class="sc">;</span>         <span class="c"># return the nth digit, counting from left </span></pre>
 
125
  <span class="i">$x</span><span class="i">-&gt;digit</span><span class="s">(</span>-<span class="i">$n</span><span class="s">)</span><span class="sc">;</span>         <span class="c"># return the nth digit, counting from left</span></pre>
114
126
<pre class="verbatim">  <span class="c"># The following all modify their first argument. If you want to preserve</span>
115
127
  <span class="c"># $x, use $z = $x-&gt;copy()-&gt;bXXX($y); See under L&lt;CAVEATS&gt; for why this is</span>
116
 
  <span class="c"># neccessary when mixing $a = $b assigments with non-overloaded math.</span>
117
 
 
118
 
  <span class="c"># set </span>
 
128
  <span class="c"># necessary when mixing $a = $b assignments with non-overloaded math.</span></pre>
 
129
<pre class="verbatim">  <span class="c"># set </span>
119
130
  <span class="i">$x</span><span class="i">-&gt;bzero</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>                   <span class="c"># set $i to 0</span>
120
131
  <span class="i">$x</span><span class="i">-&gt;bnan</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>                    <span class="c"># set $i to NaN</span>
121
132
  <span class="i">$x</span><span class="i">-&gt;bone</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>                   <span class="c"># set $x to +1</span>
127
138
  <span class="i">$x</span><span class="i">-&gt;bnorm</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>                   <span class="c"># normalize (no-op)</span>
128
139
  <span class="i">$x</span><span class="i">-&gt;bnot</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>                    <span class="c"># two&#39;s complement (bit wise not)</span>
129
140
  <span class="i">$x</span><span class="i">-&gt;binc</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>                    <span class="c"># increment x by 1</span>
130
 
  <span class="i">$x</span><span class="i">-&gt;bdec</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>                    <span class="c"># decrement x by 1</span>
131
 
  
132
 
  <span class="i">$x</span><span class="i">-&gt;badd</span><span class="s">(</span><span class="i">$y</span><span class="s">)</span><span class="sc">;</span>                   <span class="c"># addition (add $y to $x)</span>
 
141
  <span class="i">$x</span><span class="i">-&gt;bdec</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>                    <span class="c"># decrement x by 1</span></pre>
 
142
<pre class="verbatim">  <span class="i">$x</span><span class="i">-&gt;badd</span><span class="s">(</span><span class="i">$y</span><span class="s">)</span><span class="sc">;</span>                     <span class="c"># addition (add $y to $x)</span>
133
143
  <span class="i">$x</span><span class="i">-&gt;bsub</span><span class="s">(</span><span class="i">$y</span><span class="s">)</span><span class="sc">;</span>                   <span class="c"># subtraction (subtract $y from $x)</span>
134
144
  <span class="i">$x</span><span class="i">-&gt;bmul</span><span class="s">(</span><span class="i">$y</span><span class="s">)</span><span class="sc">;</span>                   <span class="c"># multiplication (multiply $x by $y)</span>
135
145
  <span class="i">$x</span><span class="i">-&gt;bdiv</span><span class="s">(</span><span class="i">$y</span><span class="s">)</span><span class="sc">;</span>                   <span class="c"># divide, set $x to quotient</span>
136
146
                                <span class="c"># return (quo,rem) or quo if scalar</span></pre>
137
147
<pre class="verbatim">  <span class="i">$x</span><span class="i">-&gt;bmod</span><span class="s">(</span><span class="i">$y</span><span class="s">)</span><span class="sc">;</span>                     <span class="c"># modulus ($x % $y)</span>
138
148
  <span class="i">$x</span><span class="i">-&gt;bpow</span><span class="s">(</span><span class="i">$y</span><span class="s">)</span><span class="sc">;</span>                   <span class="c"># power of arguments ($x ** $y)</span>
139
 
  <span class="i">$x</span><span class="i">-&gt;blsft</span><span class="s">(</span><span class="i">$y</span><span class="s">)</span><span class="sc">;</span>          <span class="c"># left shift</span>
140
 
  <span class="i">$x</span><span class="i">-&gt;brsft</span><span class="s">(</span><span class="i">$y</span><span class="s">)</span><span class="sc">;</span>          <span class="c"># right shift </span>
141
 
                                <span class="c"># return (quo,rem) or quo if scalar</span>
142
 
  
143
 
  <span class="i">$x</span><span class="i">-&gt;blog</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>                    <span class="c"># logarithm of $x to base e (Euler&#39;s number)</span>
 
149
  <span class="i">$x</span><span class="i">-&gt;bmodpow</span><span class="s">(</span><span class="i">$exp</span><span class="cm">,</span><span class="i">$mod</span><span class="s">)</span><span class="sc">;</span>  <span class="c"># modular exponentation (($num**$exp) % $mod))</span>
 
150
  <span class="i">$x</span><span class="i">-&gt;blsft</span><span class="s">(</span><span class="i">$y</span><span class="cm">,</span> <span class="i">$n</span><span class="s">)</span><span class="sc">;</span>               <span class="c"># left shift by $y places in base $n</span>
 
151
  <span class="i">$x</span><span class="i">-&gt;brsft</span><span class="s">(</span><span class="i">$y</span><span class="cm">,</span> <span class="i">$n</span><span class="s">)</span><span class="sc">;</span>               <span class="c"># right shift by $y places in base $n</span>
 
152
                                <span class="c"># returns (quo,rem) or quo if in scalar context</span></pre>
 
153
<pre class="verbatim">  <span class="i">$x</span><span class="i">-&gt;blog</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>                      <span class="c"># logarithm of $x to base e (Euler's number)</span>
144
154
  <span class="i">$x</span><span class="i">-&gt;blog</span><span class="s">(</span><span class="i">$base</span><span class="s">)</span><span class="sc">;</span>                <span class="c"># logarithm of $x to base $base (f.i. 2)</span>
145
 
  
146
 
  <span class="i">$x</span><span class="i">-&gt;band</span><span class="s">(</span><span class="i">$y</span><span class="s">)</span><span class="sc">;</span>                   <span class="c"># bit-wise and</span>
 
155
  <span class="i">$x</span><span class="i">-&gt;bexp</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>                    <span class="c"># calculate e ** $x where e is Euler's number</span></pre>
 
156
<pre class="verbatim">  <span class="i">$x</span><span class="i">-&gt;band</span><span class="s">(</span><span class="i">$y</span><span class="s">)</span><span class="sc">;</span>                     <span class="c"># bit-wise and</span>
147
157
  <span class="i">$x</span><span class="i">-&gt;bior</span><span class="s">(</span><span class="i">$y</span><span class="s">)</span><span class="sc">;</span>                   <span class="c"># bit-wise inclusive or</span>
148
158
  <span class="i">$x</span><span class="i">-&gt;bxor</span><span class="s">(</span><span class="i">$y</span><span class="s">)</span><span class="sc">;</span>                   <span class="c"># bit-wise exclusive or</span>
149
 
  <span class="i">$x</span><span class="i">-&gt;bnot</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>                    <span class="c"># bit-wise not (two&#39;s complement)</span>
150
 
 
151
 
  <span class="i">$x</span><span class="i">-&gt;bsqrt</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>                   <span class="c"># calculate square-root</span>
 
159
  <span class="i">$x</span><span class="i">-&gt;bnot</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>                    <span class="c"># bit-wise not (two&#39;s complement)</span></pre>
 
160
<pre class="verbatim">  <span class="i">$x</span><span class="i">-&gt;bsqrt</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>                     <span class="c"># calculate square-root</span>
152
161
  <span class="i">$x</span><span class="i">-&gt;broot</span><span class="s">(</span><span class="i">$y</span><span class="s">)</span><span class="sc">;</span>          <span class="c"># $y&#39;th root of $x (e.g. $y == 3 =&gt; cubic root)</span>
153
 
  <span class="i">$x</span><span class="i">-&gt;bfac</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>                    <span class="c"># factorial of $x (1*2*3*4*..$x)</span>
154
 
 
155
 
  <span class="i">$x</span><span class="i">-&gt;bround</span><span class="s">(</span><span class="i">$N</span><span class="s">)</span><span class="sc">;</span>                 <span class="c"># accuracy: preserve $N digits</span>
 
162
  <span class="i">$x</span><span class="i">-&gt;bfac</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>                    <span class="c"># factorial of $x (1*2*3*4*..$x)</span></pre>
 
163
<pre class="verbatim">  <span class="i">$x</span><span class="i">-&gt;bround</span><span class="s">(</span><span class="i">$N</span><span class="s">)</span><span class="sc">;</span>           <span class="c"># accuracy: preserve $N digits</span>
156
164
  <span class="i">$x</span><span class="i">-&gt;bfround</span><span class="s">(</span><span class="i">$N</span><span class="s">)</span><span class="sc">;</span>                <span class="c"># precision: round to the $Nth digit</span></pre>
157
165
<pre class="verbatim">  <span class="i">$x</span><span class="i">-&gt;bfloor</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>                    <span class="c"># return integer less or equal than $x</span>
158
166
  <span class="i">$x</span><span class="i">-&gt;bceil</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>                   <span class="c"># return integer greater or equal than $x</span></pre>
159
167
<pre class="verbatim">  <span class="c"># The following do not modify their arguments:</span></pre>
160
168
<pre class="verbatim">  <span class="i">bgcd</span><span class="s">(</span><span class="i">@values</span><span class="s">)</span><span class="sc">;</span>              <span class="c"># greatest common divisor</span>
161
 
  <span class="i">blcm</span><span class="s">(</span><span class="i">@values</span><span class="s">)</span><span class="sc">;</span>            <span class="c"># lowest common multiplicator</span>
162
 
  
163
 
  <span class="i">$x</span><span class="i">-&gt;bstr</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>                    <span class="c"># return string</span>
 
169
  <span class="i">blcm</span><span class="s">(</span><span class="i">@values</span><span class="s">)</span><span class="sc">;</span>            <span class="c"># lowest common multiplicator</span></pre>
 
170
<pre class="verbatim">  <span class="i">$x</span><span class="i">-&gt;bstr</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>                      <span class="c"># return string</span>
164
171
  <span class="i">$x</span><span class="i">-&gt;bsstr</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>                   <span class="c"># return string in scientific notation</span></pre>
165
172
<pre class="verbatim">  <span class="i">$x</span><span class="i">-&gt;as_int</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>                    <span class="c"># return $x as BigInt </span>
166
173
  <span class="i">$x</span><span class="i">-&gt;exponent</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>                <span class="c"># return exponent as BigInt</span>
167
174
  <span class="i">$x</span><span class="i">-&gt;mantissa</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>                <span class="c"># return mantissa as BigInt</span>
168
175
  <span class="i">$x</span><span class="i">-&gt;parts</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>                   <span class="c"># return (mantissa,exponent) as BigInt</span></pre>
169
176
<pre class="verbatim">  <span class="i">$x</span><span class="i">-&gt;length</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>                    <span class="c"># number of digits (w/o sign and &#39;.&#39;)</span>
170
 
  <span class="s">(</span><span class="i">$l</span><span class="cm">,</span><span class="i">$f</span><span class="s">)</span> = <span class="i">$x</span><span class="i">-&gt;length</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>    <span class="c"># number of digits, and length of fraction      </span></pre>
 
177
  <span class="s">(</span><span class="i">$l</span><span class="cm">,</span><span class="i">$f</span><span class="s">)</span> = <span class="i">$x</span><span class="i">-&gt;length</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>    <span class="c"># number of digits, and length of fraction</span></pre>
171
178
<pre class="verbatim">  <span class="i">$x</span><span class="i">-&gt;precision</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>         <span class="c"># return P of $x (or global, if P of $x undef)</span>
172
179
  <span class="i">$x</span><span class="i">-&gt;precision</span><span class="s">(</span><span class="i">$n</span><span class="s">)</span><span class="sc">;</span>              <span class="c"># set P of $x to $n</span>
173
180
  <span class="i">$x</span><span class="i">-&gt;accuracy</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>                <span class="c"># return A of $x (or global, if A of $x undef)</span>
174
181
  <span class="i">$x</span><span class="i">-&gt;accuracy</span><span class="s">(</span><span class="i">$n</span><span class="s">)</span><span class="sc">;</span>               <span class="c"># set A $x to $n</span></pre>
175
182
<pre class="verbatim">  <span class="c"># these get/set the appropriate global value for all BigFloat objects</span>
176
 
  <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a>-&gt;precision<span class="s">(</span><span class="s">)</span><span class="sc">;</span> <span class="c"># Precision</span>
177
 
  <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a>-&gt;accuracy<span class="s">(</span><span class="s">)</span><span class="sc">;</span>  <span class="c"># Accuracy</span>
178
 
  <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a>-&gt;round_mode<span class="s">(</span><span class="s">)</span><span class="sc">;</span>        <span class="c"># rounding mode</span></pre>
 
183
  <span class="w">Math::BigFloat</span><span class="w">-&gt;precision</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>   <span class="c"># Precision</span>
 
184
  <span class="w">Math::BigFloat</span><span class="w">-&gt;accuracy</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>    <span class="c"># Accuracy</span>
 
185
  <span class="w">Math::BigFloat</span><span class="w">-&gt;round_mode</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>  <span class="c"># rounding mode</span></pre>
179
186
<a name="DESCRIPTION"></a><h1>DESCRIPTION</h1>
180
 
<p>All operators (inlcuding basic math operations) are overloaded if you
 
187
<p>All operators (including basic math operations) are overloaded if you
181
188
declare your big floating point numbers as</p>
182
 
<pre class="verbatim">  <span class="i">$i</span> = new <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a> <span class="q">&#39;12_3.456_789_123_456_789E-2&#39;</span><span class="sc">;</span></pre>
 
189
<pre class="verbatim">  <span class="i">$i</span> = <span class="w">new</span> <span class="w">Math::BigFloat</span> <span class="q">&#39;12_3.456_789_123_456_789E-2&#39;</span><span class="sc">;</span></pre>
183
190
<p>Operations with overloaded operators preserve the arguments, which is
184
191
exactly what you expect.</p>
185
192
<a name="Canonical-notation"></a><h2>Canonical notation</h2>
203
210
</p>
204
211
</li>
205
212
</ul>
206
 
<p>all with optional leading and trailing zeros and/or spaces. Additonally,
 
213
<p>all with optional leading and trailing zeros and/or spaces. Additionally,
207
214
numbers are allowed to have an underscore between any two digits.</p>
208
215
<p>Empty strings as well as other illegal numbers results in 'NaN'.</p>
209
216
<p>bnorm() on a BigFloat object is now effectively a no-op, since the numbers 
231
238
, <code class="inline"><span class="i">bacmp</span><span class="s">(</span><span class="s">)</span></code>
232
239
)
233
240
return either undef, &lt;0, 0 or &gt;0 and are suited for sort.</p>
234
 
<p>Actual math is done by using the class defined with <code class="inline">with =</code>
 
241
<p>Actual math is done by using the class defined with <code class="inline"><span class="w">with</span> =</code>
235
242
 Class;&gt; (which
236
243
defaults to BigInts) to represent the mantissa and exponent.</p>
237
244
<p>The sign <code class="inline"><span class="q">/^[+-]$/</span></code>
271
278
<p>If there is no gloabl precision or accuracy set, <b>and</b> the operation in
272
279
question was not called with a requested precision or accuracy, <b>and</b> the
273
280
input $x has no accuracy or precision set, then a fallback parameter will
274
 
be used. For historical reasons, it is called <code class="inline">div_scale</code>
 
281
be used. For historical reasons, it is called <code class="inline"><span class="w">div_scale</span></code>
275
282
 and can be accessed
276
283
via:</p>
277
 
<pre class="verbatim">  <span class="i">$d</span> = <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a>-&gt;div_scale<span class="s">(</span><span class="s">)</span><span class="sc">;</span>               <span class="c"># query</span>
278
 
        <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a>-&gt;div_scale<span class="s">(</span><span class="i">$n</span><span class="s">)</span><span class="sc">;</span>                  <span class="c"># set to $n digits</span></pre>
279
 
<p>The default value for <code class="inline">div_scale</code>
 
284
<pre class="verbatim">  <span class="i">$d</span> = <span class="w">Math::BigFloat</span><span class="w">-&gt;div_scale</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>         <span class="c"># query</span>
 
285
        <span class="w">Math::BigFloat</span><span class="w">-&gt;div_scale</span><span class="s">(</span><span class="i">$n</span><span class="s">)</span><span class="sc">;</span>                    <span class="c"># set to $n digits</span></pre>
 
286
<p>The default value for <code class="inline"><span class="w">div_scale</span></code>
280
287
 is 40.</p>
281
288
<p>In case the result of one operation has more digits than specified,
282
289
it is rounded. The rounding mode taken is either the default mode, or the one
283
290
supplied to the operation after the <i>scale</i>:</p>
284
 
<pre class="verbatim">  <span class="i">$x</span> = <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a>-&gt;new<span class="s">(</span><span class="n">2</span><span class="s">)</span><span class="sc">;</span>
285
 
        <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a>-&gt;accuracy<span class="s">(</span><span class="n">5</span><span class="s">)</span><span class="sc">;</span>            <span class="c"># 5 digits max</span>
 
291
<pre class="verbatim">  <span class="i">$x</span> = <span class="w">Math::BigFloat</span><span class="w">-&gt;new</span><span class="s">(</span><span class="n">2</span><span class="s">)</span><span class="sc">;</span>
 
292
        <span class="w">Math::BigFloat</span><span class="w">-&gt;accuracy</span><span class="s">(</span><span class="n">5</span><span class="s">)</span><span class="sc">;</span>              <span class="c"># 5 digits max</span>
286
293
        <span class="i">$y</span> = <span class="i">$x</span><span class="i">-&gt;copy</span><span class="s">(</span><span class="s">)</span><span class="i">-&gt;bdiv</span><span class="s">(</span><span class="n">3</span><span class="s">)</span><span class="sc">;</span>          <span class="c"># will give 0.66667</span>
287
294
        <span class="i">$y</span> = <span class="i">$x</span><span class="i">-&gt;copy</span><span class="s">(</span><span class="s">)</span><span class="i">-&gt;bdiv</span><span class="s">(</span><span class="n">3</span><span class="cm">,</span><span class="n">6</span><span class="s">)</span><span class="sc">;</span>         <span class="c"># will give 0.666667</span>
288
295
        <span class="i">$y</span> = <span class="i">$x</span><span class="i">-&gt;copy</span><span class="s">(</span><span class="s">)</span><span class="i">-&gt;bdiv</span><span class="s">(</span><span class="n">3</span><span class="cm">,</span><span class="n">6</span><span class="cm">,</span><a class="l_k" href="../functions/undef.html">undef</a><span class="cm">,</span><span class="q">&#39;odd&#39;</span><span class="s">)</span><span class="sc">;</span>    <span class="c"># will give 0.666667</span>
289
 
        <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a>-&gt;round_mode<span class="s">(</span><span class="q">&#39;zero&#39;</span><span class="s">)</span><span class="sc">;</span>
 
296
        <span class="w">Math::BigFloat</span><span class="w">-&gt;round_mode</span><span class="s">(</span><span class="q">&#39;zero&#39;</span><span class="s">)</span><span class="sc">;</span>
290
297
        <span class="i">$y</span> = <span class="i">$x</span><span class="i">-&gt;copy</span><span class="s">(</span><span class="s">)</span><span class="i">-&gt;bdiv</span><span class="s">(</span><span class="n">3</span><span class="cm">,</span><span class="n">6</span><span class="s">)</span><span class="sc">;</span>         <span class="c"># will also give 0.666667</span></pre>
291
 
<p>Note that <code class="inline"><a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a>-&gt;accuracy<span class="s">(</span><span class="s">)</span></code>
292
 
 and <code class="inline"><a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a>-&gt;precision<span class="s">(</span><span class="s">)</span></code>
 
298
<p>Note that <code class="inline"><span class="w">Math::BigFloat</span><span class="w">-&gt;accuracy</span><span class="s">(</span><span class="s">)</span></code>
 
299
 and <code class="inline"><span class="w">Math::BigFloat</span><span class="w">-&gt;precision</span><span class="s">(</span><span class="s">)</span></code>
293
300
 
294
301
set the global variables, and thus <b>any</b> newly created number will be subject
295
 
to the global rounding <b>immidiately</b>. This means that in the examples above, the
 
302
to the global rounding <b>immediately</b>. This means that in the examples above, the
296
303
<code class="inline"><span class="n">3</span></code>
297
304
 as argument to <code class="inline"><span class="i">bdiv</span><span class="s">(</span><span class="s">)</span></code>
298
305
 will also get an accuracy of <b>5</b>.</p>
299
306
<p>It is less confusing to either calculate the result fully, and afterwards
300
 
round it explicitely, or use the additional parameters to the math
 
307
round it explicitly, or use the additional parameters to the math
301
308
functions like so:</p>
302
 
<pre class="verbatim">  <a class="l_k" href="../functions/use.html">use</a> <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a><span class="sc">;</span>     
303
 
        <span class="i">$x</span> = <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a>-&gt;new<span class="s">(</span><span class="n">2</span><span class="s">)</span><span class="sc">;</span>
 
309
<pre class="verbatim">  <a class="l_k" href="../functions/use.html">use</a> <span class="w">Math::BigFloat</span><span class="sc">;</span>      
 
310
        <span class="i">$x</span> = <span class="w">Math::BigFloat</span><span class="w">-&gt;new</span><span class="s">(</span><span class="n">2</span><span class="s">)</span><span class="sc">;</span>
304
311
        <span class="i">$y</span> = <span class="i">$x</span><span class="i">-&gt;copy</span><span class="s">(</span><span class="s">)</span><span class="i">-&gt;bdiv</span><span class="s">(</span><span class="n">3</span><span class="s">)</span><span class="sc">;</span>
305
312
        <a class="l_k" href="../functions/print.html">print</a> <span class="i">$y</span><span class="i">-&gt;bround</span><span class="s">(</span><span class="n">5</span><span class="s">)</span><span class="cm">,</span><span class="q">&quot;\n&quot;</span><span class="sc">;</span>              <span class="c"># will give 0.66667</span></pre>
306
313
<pre class="verbatim">  or</pre>
307
 
<pre class="verbatim">  <a class="l_k" href="../functions/use.html">use</a> <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a><span class="sc">;</span>     
308
 
        <span class="i">$x</span> = <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a>-&gt;new<span class="s">(</span><span class="n">2</span><span class="s">)</span><span class="sc">;</span>
 
314
<pre class="verbatim">  <a class="l_k" href="../functions/use.html">use</a> <span class="w">Math::BigFloat</span><span class="sc">;</span>      
 
315
        <span class="i">$x</span> = <span class="w">Math::BigFloat</span><span class="w">-&gt;new</span><span class="s">(</span><span class="n">2</span><span class="s">)</span><span class="sc">;</span>
309
316
        <span class="i">$y</span> = <span class="i">$x</span><span class="i">-&gt;copy</span><span class="s">(</span><span class="s">)</span><span class="i">-&gt;bdiv</span><span class="s">(</span><span class="n">3</span><span class="cm">,</span><span class="n">5</span><span class="s">)</span><span class="sc">;</span>         <span class="c"># will give 0.66667</span>
310
317
        <a class="l_k" href="../functions/print.html">print</a> <span class="q">&quot;$y\n&quot;</span><span class="sc">;</span></pre>
311
318
<a name="Rounding"></a><h2>Rounding</h2>
312
319
<ul>
313
320
<li><a name="ffround-(-%2b%24scale-)"></a><b>ffround ( +$scale )</b>
314
321
<p>Rounds to the $scale'th place left from the '.', counting from the dot.
315
 
The first digit is numbered 1. </p>
 
322
The first digit is numbered 1.</p>
316
323
</li>
317
324
<li><a name="ffround-(--%24scale-)"></a><b>ffround ( -$scale )</b>
318
325
<p>Rounds to the $scale'th place right from the '.', counting from the dot.</p>
330
337
</li>
331
338
</ul>
332
339
<p>All rounding functions take as a second parameter a rounding mode from one of
333
 
the following: 'even', 'odd', '+inf', '-inf', 'zero' or 'trunc'.</p>
 
340
the following: 'even', 'odd', '+inf', '-inf', 'zero', 'trunc' or 'common'.</p>
334
341
<p>The default rounding mode is 'even'. By using
335
 
<code class="inline"><a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a>-&gt;round_mode<span class="s">(</span><span class="i">$round_mode</span><span class="s">)</span><span class="sc">;</span></code>
 
342
<code class="inline"><span class="w">Math::BigFloat</span><span class="w">-&gt;round_mode</span><span class="s">(</span><span class="i">$round_mode</span><span class="s">)</span><span class="sc">;</span></code>
336
343
 you can get and set the default
337
344
mode for subsequent rounding. The usage of <code class="inline">$Math::BigFloat::$round_mode</code> is
338
345
no longer supported.
339
346
The second parameter to the round functions then overrides the default
340
 
temporarily. </p>
 
347
temporarily.</p>
341
348
<p>The <code class="inline"><span class="i">as_number</span><span class="s">(</span><span class="s">)</span></code>
342
349
 function returns a BigInt from a Math::BigFloat. It uses
343
350
'trunc' as rounding mode to make it equivalent to:</p>
346
353
<p>You can override this by passing the desired rounding mode as parameter to
347
354
<code class="inline"><span class="i">as_number</span><span class="s">(</span><span class="s">)</span></code>
348
355
:</p>
349
 
<pre class="verbatim">  <span class="i">$x</span> = <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a>-&gt;new<span class="s">(</span><span class="n">2.5</span><span class="s">)</span><span class="sc">;</span>
 
356
<pre class="verbatim">  <span class="i">$x</span> = <span class="w">Math::BigFloat</span><span class="w">-&gt;new</span><span class="s">(</span><span class="n">2.5</span><span class="s">)</span><span class="sc">;</span>
350
357
        <span class="i">$y</span> = <span class="i">$x</span><span class="i">-&gt;as_number</span><span class="s">(</span><span class="q">&#39;odd&#39;</span><span class="s">)</span><span class="sc">;</span> <span class="c"># $y = 3</span></pre>
351
358
<a name="METHODS"></a><h1>METHODS</h1>
 
359
<p>Math::BigFloat supports all methods that Math::BigInt supports, except it
 
360
calculates non-integer results when possible. Please see <a href="../Math/BigInt.html">Math::BigInt</a>
 
361
for a full description of each method. Below are just the most important
 
362
differences:</p>
352
363
<a name="accuracy"></a><h2>accuracy</h2>
353
364
<pre class="verbatim">        <span class="i">$x</span><span class="i">-&gt;accuracy</span><span class="s">(</span><span class="n">5</span><span class="s">)</span><span class="sc">;</span>                <span class="c"># local for $x</span>
354
 
        CLASS-&gt;accuracy<span class="s">(</span><span class="n">5</span><span class="s">)</span><span class="sc">;</span>             <span class="c"># global for all members of CLASS</span>
 
365
        <span class="w">CLASS</span><span class="w">-&gt;accuracy</span><span class="s">(</span><span class="n">5</span><span class="s">)</span><span class="sc">;</span>             <span class="c"># global for all members of CLASS</span>
355
366
                                        <span class="c"># Note: This also applies to new()!</span></pre>
356
367
<pre class="verbatim">        <span class="i">$A</span> = <span class="i">$x</span><span class="i">-&gt;accuracy</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>            <span class="c"># read out accuracy that affects $x</span>
357
 
        <span class="i">$A</span> = CLASS-&gt;accuracy<span class="s">(</span><span class="s">)</span><span class="sc">;</span>         <span class="c"># read out global accuracy</span></pre>
 
368
        <span class="i">$A</span> = <span class="w">CLASS</span><span class="w">-&gt;accuracy</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>         <span class="c"># read out global accuracy</span></pre>
358
369
<p>Set or get the global or local accuracy, aka how many significant digits the
359
370
results have. If you set a global accuracy, then this also applies to new()!</p>
360
371
<p>Warning! The accuracy <i>sticks</i>, e.g. once you created a number under the
361
 
influence of <code class="inline">CLASS-&gt;accuracy<span class="s">(</span><span class="i">$A</span><span class="s">)</span></code>
 
372
influence of <code class="inline"><span class="w">CLASS</span><span class="w">-&gt;accuracy</span><span class="s">(</span><span class="i">$A</span><span class="s">)</span></code>
362
373
, all results from math operations with
363
374
that number will also be rounded.</p>
364
 
<p>In most cases, you should probably round the results explicitely using one of
 
375
<p>In most cases, you should probably round the results explicitly using one of
365
376
<i>round()</i>, <i>bround()</i> or <i>bfround()</i> or by passing the desired accuracy
366
377
to the math operation as additional parameter:</p>
367
 
<pre class="verbatim">        <a class="l_k" href="../functions/my.html">my</a> <span class="i">$x</span> = <a class="l_w" href="../Math/BigInt.html">Math::BigInt</a>-&gt;new<span class="s">(</span><span class="n">30000</span><span class="s">)</span><span class="sc">;</span>
368
 
        <a class="l_k" href="../functions/my.html">my</a> <span class="i">$y</span> = <a class="l_w" href="../Math/BigInt.html">Math::BigInt</a>-&gt;new<span class="s">(</span><span class="n">7</span><span class="s">)</span><span class="sc">;</span>
 
378
<pre class="verbatim">        <a class="l_k" href="../functions/my.html">my</a> <span class="i">$x</span> = <span class="w">Math::BigInt</span><span class="w">-&gt;new</span><span class="s">(</span><span class="n">30000</span><span class="s">)</span><span class="sc">;</span>
 
379
        <a class="l_k" href="../functions/my.html">my</a> <span class="i">$y</span> = <span class="w">Math::BigInt</span><span class="w">-&gt;new</span><span class="s">(</span><span class="n">7</span><span class="s">)</span><span class="sc">;</span>
369
380
        <a class="l_k" href="../functions/print.html">print</a> <a class="l_k" href="../functions/scalar.html">scalar</a> <span class="i">$x</span><span class="i">-&gt;copy</span><span class="s">(</span><span class="s">)</span><span class="i">-&gt;bdiv</span><span class="s">(</span><span class="i">$y</span><span class="cm">,</span> <span class="n">2</span><span class="s">)</span><span class="sc">;</span>           <span class="c"># print 4300</span>
370
381
        <a class="l_k" href="../functions/print.html">print</a> <a class="l_k" href="../functions/scalar.html">scalar</a> <span class="i">$x</span><span class="i">-&gt;copy</span><span class="s">(</span><span class="s">)</span><span class="i">-&gt;bdiv</span><span class="s">(</span><span class="i">$y</span><span class="s">)</span><span class="i">-&gt;bround</span><span class="s">(</span><span class="n">2</span><span class="s">)</span><span class="sc">;</span>   <span class="c"># print 4300</span></pre>
371
382
<a name="precision()"></a><h2>precision()</h2>
372
383
<pre class="verbatim">        <span class="i">$x</span><span class="i">-&gt;precision</span><span class="s">(</span><span class="n">-2</span><span class="s">)</span><span class="sc">;</span>      <span class="c"># local for $x, round at the second digit right of the dot</span>
373
384
        <span class="i">$x</span><span class="i">-&gt;precision</span><span class="s">(</span><span class="n">2</span><span class="s">)</span><span class="sc">;</span>       <span class="c"># ditto, round at the second digit left of the dot</span></pre>
374
 
<pre class="verbatim">        CLASS-&gt;precision<span class="s">(</span><span class="n">5</span><span class="s">)</span><span class="sc">;</span>    <span class="c"># Global for all members of CLASS</span>
 
385
<pre class="verbatim">        <span class="w">CLASS</span><span class="w">-&gt;precision</span><span class="s">(</span><span class="n">5</span><span class="s">)</span><span class="sc">;</span>    <span class="c"># Global for all members of CLASS</span>
375
386
                                <span class="c"># This also applies to new()!</span>
376
 
        CLASS-&gt;precision<span class="s">(</span><span class="n">-5</span><span class="s">)</span><span class="sc">;</span>   <span class="c"># ditto</span></pre>
377
 
<pre class="verbatim">        <span class="i">$P</span> = CLASS-&gt;precision<span class="s">(</span><span class="s">)</span><span class="sc">;</span>        <span class="c"># read out global precision</span>
 
387
        <span class="w">CLASS</span><span class="w">-&gt;precision</span><span class="s">(</span><span class="n">-5</span><span class="s">)</span><span class="sc">;</span>   <span class="c"># ditto</span></pre>
 
388
<pre class="verbatim">        <span class="i">$P</span> = <span class="w">CLASS</span><span class="w">-&gt;precision</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>        <span class="c"># read out global precision</span>
378
389
        <span class="i">$P</span> = <span class="i">$x</span><span class="i">-&gt;precision</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>           <span class="c"># read out precision that affects $x</span></pre>
379
390
<p>Note: You probably want to use <i>accuracy()</i> instead. With <a href="http://search.cpan.org/perldoc/accuracy">accuracy</a> you
380
391
set the number of digits each result should have, with <a href="http://search.cpan.org/perldoc/precision">precision</a> you
381
392
set the place where to round!</p>
 
393
<a name="bexp()"></a><h2>bexp()</h2>
 
394
<pre class="verbatim">  <span class="i">$x</span><span class="i">-&gt;bexp</span><span class="s">(</span><span class="i">$accuracy</span><span class="s">)</span><span class="sc">;</span>              <span class="c"># calculate e ** X</span></pre>
 
395
<p>Calculates the expression <code class="inline"><span class="w">e</span> ** <span class="i">$x</span></code>
 
396
 where <code class="inline"><span class="w">e</span></code>
 
397
 is Euler's number.</p>
 
398
<p>This method was added in v1.82 of Math::BigInt (April 2007).</p>
 
399
<a name="bnok()"></a><h2>bnok()</h2>
 
400
<pre class="verbatim">  <span class="i">$x</span><span class="i">-&gt;bnok</span><span class="s">(</span><span class="i">$y</span><span class="s">)</span><span class="sc">;</span>                <span class="c"># x over y (binomial coefficient n over k)</span></pre>
 
401
<p>Calculates the binomial coefficient n over k, also called the "choose"
 
402
function. The result is equivalent to:</p>
 
403
<pre class="verbatim">  ( n )      n!
 
404
        | - |  = -------
 
405
        ( k )    k!(n-k)!</pre><p>This method was added in v1.84 of Math::BigInt (April 2007).</p>
 
406
<a name="bpi()"></a><h2>bpi()</h2>
 
407
<pre class="verbatim">  <a class="l_k" href="../functions/print.html">print</a> <span class="i">Math::BigFloat</span><span class="i">-&gt;bpi</span><span class="s">(</span><span class="n">100</span><span class="s">)</span><span class="cm">,</span> <span class="q">&quot;\n&quot;</span><span class="sc">;</span></pre>
 
408
<p>Calculate PI to N digits (including the 3 before the dot). The result is
 
409
rounded according to the current rounding mode, which defaults to "even".</p>
 
410
<p>This method was added in v1.87 of Math::BigInt (June 2007).</p>
 
411
<a name="bcos()"></a><h2>bcos()</h2>
 
412
<pre class="verbatim">  <a class="l_k" href="../functions/my.html">my</a> <span class="i">$x</span> = <span class="w">Math::BigFloat</span><span class="w">-&gt;new</span><span class="s">(</span><span class="n">1</span><span class="s">)</span><span class="sc">;</span>
 
413
        <a class="l_k" href="../functions/print.html">print</a> <span class="i">$x</span><span class="i">-&gt;bcos</span><span class="s">(</span><span class="n">100</span><span class="s">)</span><span class="cm">,</span> <span class="q">&quot;\n&quot;</span><span class="sc">;</span></pre>
 
414
<p>Calculate the cosinus of $x, modifying $x in place.</p>
 
415
<p>This method was added in v1.87 of Math::BigInt (June 2007).</p>
 
416
<a name="bsin()"></a><h2>bsin()</h2>
 
417
<pre class="verbatim">  <a class="l_k" href="../functions/my.html">my</a> <span class="i">$x</span> = <span class="w">Math::BigFloat</span><span class="w">-&gt;new</span><span class="s">(</span><span class="n">1</span><span class="s">)</span><span class="sc">;</span>
 
418
        <a class="l_k" href="../functions/print.html">print</a> <span class="i">$x</span><span class="i">-&gt;bsin</span><span class="s">(</span><span class="n">100</span><span class="s">)</span><span class="cm">,</span> <span class="q">&quot;\n&quot;</span><span class="sc">;</span></pre>
 
419
<p>Calculate the sinus of $x, modifying $x in place.</p>
 
420
<p>This method was added in v1.87 of Math::BigInt (June 2007).</p>
 
421
<a name="batan2()"></a><h2>batan2()</h2>
 
422
<pre class="verbatim">  <a class="l_k" href="../functions/my.html">my</a> <span class="i">$y</span> = <span class="w">Math::BigFloat</span><span class="w">-&gt;new</span><span class="s">(</span><span class="n">2</span><span class="s">)</span><span class="sc">;</span>
 
423
        <a class="l_k" href="../functions/my.html">my</a> <span class="i">$x</span> = <span class="w">Math::BigFloat</span><span class="w">-&gt;new</span><span class="s">(</span><span class="n">3</span><span class="s">)</span><span class="sc">;</span>
 
424
        <a class="l_k" href="../functions/print.html">print</a> <span class="i">$y</span><span class="i">-&gt;batan2</span><span class="s">(</span><span class="i">$x</span><span class="s">)</span><span class="cm">,</span> <span class="q">&quot;\n&quot;</span><span class="sc">;</span></pre>
 
425
<p>Calculate the arcus tanges of <code class="inline"><span class="i">$y</span></code>
 
426
 divided by <code class="inline"><span class="i">$x</span></code>
 
427
, modifying $y in place.
 
428
See also <i>batan()</i>.</p>
 
429
<p>This method was added in v1.87 of Math::BigInt (June 2007).</p>
 
430
<a name="batan()"></a><h2>batan()</h2>
 
431
<pre class="verbatim">  <a class="l_k" href="../functions/my.html">my</a> <span class="i">$x</span> = <span class="w">Math::BigFloat</span><span class="w">-&gt;new</span><span class="s">(</span><span class="n">1</span><span class="s">)</span><span class="sc">;</span>
 
432
        <a class="l_k" href="../functions/print.html">print</a> <span class="i">$x</span><span class="i">-&gt;batan</span><span class="s">(</span><span class="n">100</span><span class="s">)</span><span class="cm">,</span> <span class="q">&quot;\n&quot;</span><span class="sc">;</span></pre>
 
433
<p>Calculate the arcus tanges of $x, modifying $x in place. See also <i>batan2()</i>.</p>
 
434
<p>This method was added in v1.87 of Math::BigInt (June 2007).</p>
 
435
<a name="bmuladd()"></a><h2>bmuladd()</h2>
 
436
<pre class="verbatim">  <span class="i">$x</span><span class="i">-&gt;bmuladd</span><span class="s">(</span><span class="i">$y</span><span class="cm">,</span><span class="i">$z</span><span class="s">)</span><span class="sc">;</span></pre>
 
437
<p>Multiply $x by $y, and then add $z to the result.</p>
 
438
<p>This method was added in v1.87 of Math::BigInt (June 2007).</p>
382
439
<a name="Autocreating-constants"></a><h1>Autocreating constants</h1>
383
 
<p>After <code class="inline"><a class="l_k" href="../functions/use.html">use</a> <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a> <span class="q">&#39;:constant&#39;</span></code>
 
440
<p>After <code class="inline"><a class="l_k" href="../functions/use.html">use</a> <span class="w">Math::BigFloat</span> <span class="q">&#39;:constant&#39;</span></code>
384
441
 all the floating point constants
385
 
in the given scope are converted to <code class="inline"><a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a></code>. This conversion
 
442
in the given scope are converted to <code class="inline"><span class="w">Math::BigFloat</span></code>
 
443
. This conversion
386
444
happens at compile time.</p>
387
445
<p>In particular</p>
388
446
<pre class="verbatim">  perl -MMath::BigFloat=:constant -e 'print 2E-100,"\n"'</pre><p>prints the value of <code class="inline"><span class="n">2E-100</span></code>
395
453
<a name="Math-library"></a><h2>Math library</h2>
396
454
<p>Math with the numbers is done (by default) by a module called
397
455
Math::BigInt::Calc. This is equivalent to saying:</p>
398
 
<pre class="verbatim">  <a class="l_k" href="../functions/use.html">use</a> <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a> <a class="l_w" href="../lib.html">lib</a> <span class="cm">=&gt;</span> <span class="q">&#39;Calc&#39;</span><span class="sc">;</span></pre>
 
456
<pre class="verbatim">  <a class="l_k" href="../functions/use.html">use</a> <span class="w">Math::BigFloat</span> <span class="w">lib</span> <span class="cm">=&gt;</span> <span class="q">&#39;Calc&#39;</span><span class="sc">;</span></pre>
399
457
<p>You can change this by using:</p>
400
 
<pre class="verbatim">  <a class="l_k" href="../functions/use.html">use</a> <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a> <a class="l_w" href="../lib.html">lib</a> <span class="cm">=&gt;</span> <span class="q">&#39;BitVect&#39;</span><span class="sc">;</span></pre>
 
458
<pre class="verbatim">  <a class="l_k" href="../functions/use.html">use</a> <span class="w">Math::BigFloat</span> <span class="w">lib</span> <span class="cm">=&gt;</span> <span class="q">&#39;GMP&#39;</span><span class="sc">;</span></pre>
 
459
<p>Note: The keyword 'lib' will warn when the requested library could not be
 
460
loaded. To suppress the warning use 'try' instead:</p>
 
461
<pre class="verbatim">  <a class="l_k" href="../functions/use.html">use</a> <span class="w">Math::BigFloat</span> <span class="w">try</span> <span class="cm">=&gt;</span> <span class="q">'GMP'</span><span class="sc">;</span></pre>
 
462
<p>To turn the warning into a die(), use 'only' instead:</p>
 
463
<pre class="verbatim">  <a class="l_k" href="../functions/use.html">use</a> <span class="w">Math::BigFloat</span> <span class="w">only</span> <span class="cm">=&gt;</span> <span class="q">'GMP'</span><span class="sc">;</span></pre>
401
464
<p>The following would first try to find Math::BigInt::Foo, then
402
465
Math::BigInt::Bar, and when this also fails, revert to Math::BigInt::Calc:</p>
403
 
<pre class="verbatim">  <a class="l_k" href="../functions/use.html">use</a> <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a> <a class="l_w" href="../lib.html">lib</a> <span class="cm">=&gt;</span> <span class="q">&#39;Foo,Math::BigInt::Bar&#39;</span><span class="sc">;</span></pre>
404
 
<p>Calc.pm uses as internal format an array of elements of some decimal base
405
 
(usually 1e7, but this might be differen for some systems) with the least
406
 
significant digit first, while BitVect.pm uses a bit vector of base 2, most
407
 
significant bit first. Other modules might use even different means of
408
 
representing the numbers. See the respective module documentation for further
409
 
details.</p>
 
466
<pre class="verbatim">  <a class="l_k" href="../functions/use.html">use</a> <span class="w">Math::BigFloat</span> <span class="w">lib</span> <span class="cm">=&gt;</span> <span class="q">&#39;Foo,Math::BigInt::Bar&#39;</span><span class="sc">;</span></pre>
 
467
<p>See the respective low-level library documentation for further details.</p>
410
468
<p>Please note that Math::BigFloat does <b>not</b> use the denoted library itself,
411
469
but it merely passes the lib argument to Math::BigInt. So, instead of the need
412
470
to do:</p>
413
 
<pre class="verbatim">  <a class="l_k" href="../functions/use.html">use</a> <a class="l_w" href="../Math/BigInt.html">Math::BigInt</a> <a class="l_w" href="../lib.html">lib</a> <span class="cm">=&gt;</span> <span class="q">&#39;GMP&#39;</span><span class="sc">;</span>
414
 
        <a class="l_k" href="../functions/use.html">use</a> <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a><span class="sc">;</span></pre>
 
471
<pre class="verbatim">  <a class="l_k" href="../functions/use.html">use</a> <span class="w">Math::BigInt</span> <span class="w">lib</span> <span class="cm">=&gt;</span> <span class="q">&#39;GMP&#39;</span><span class="sc">;</span>
 
472
        <a class="l_k" href="../functions/use.html">use</a> <span class="w">Math::BigFloat</span><span class="sc">;</span></pre>
415
473
<p>you can roll it all into one line:</p>
416
 
<pre class="verbatim">  <a class="l_k" href="../functions/use.html">use</a> <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a> <a class="l_w" href="../lib.html">lib</a> <span class="cm">=&gt;</span> <span class="q">&#39;GMP&#39;</span><span class="sc">;</span></pre>
 
474
<pre class="verbatim">  <a class="l_k" href="../functions/use.html">use</a> <span class="w">Math::BigFloat</span> <span class="w">lib</span> <span class="cm">=&gt;</span> <span class="q">&#39;GMP&#39;</span><span class="sc">;</span></pre>
417
475
<p>It is also possible to just require Math::BigFloat:</p>
418
 
<pre class="verbatim">  <a class="l_k" href="../functions/require.html">require</a> <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a><span class="sc">;</span></pre>
419
 
<p>This will load the neccessary things (like BigInt) when they are needed, and
 
476
<pre class="verbatim">  <a class="l_k" href="../functions/require.html">require</a> <span class="w">Math::BigFloat</span><span class="sc">;</span></pre>
 
477
<p>This will load the necessary things (like BigInt) when they are needed, and
420
478
automatically.</p>
421
 
<p>Use the lib, Luke! And see <a href="#Using-Math%3a%3aBigInt%3a%3aLite">"Using Math::BigInt::Lite"</a> for more details than
422
 
you ever wanted to know about loading a different library.</p>
 
479
<p>See <a href="../Math/BigInt.html">Math::BigInt</a> for more details than you ever wanted to know about using
 
480
a different low-level library.</p>
423
481
<a name="Using-Math%3a%3aBigInt%3a%3aLite"></a><h2>Using Math::BigInt::Lite</h2>
424
 
<p>It is possible to use <a href="http://search.cpan.org/perldoc/Math::BigInt::Lite">Math::BigInt::Lite</a> with Math::BigFloat:</p>
425
 
<pre class="verbatim">        <span class="c"># 1</span>
426
 
        <a class="l_k" href="../functions/use.html">use</a> <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a> with <span class="cm">=&gt;</span> <span class="q">&#39;Math::BigInt::Lite&#39;</span><span class="sc">;</span></pre>
427
 
<p>There is no need to "use Math::BigInt" or "use Math::BigInt::Lite", but you
428
 
can combine these if you want. For instance, you may want to use
429
 
Math::BigInt objects in your main script, too.</p>
430
 
<pre class="verbatim">        <span class="c"># 2</span>
431
 
        <a class="l_k" href="../functions/use.html">use</a> <a class="l_w" href="../Math/BigInt.html">Math::BigInt</a><span class="sc">;</span>
432
 
        <a class="l_k" href="../functions/use.html">use</a> <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a> with <span class="cm">=&gt;</span> <span class="q">&#39;Math::BigInt::Lite&#39;</span><span class="sc">;</span></pre>
433
 
<p>Of course, you can combine this with the <code class="inline"><a class="l_w" href="../lib.html">lib</a></code> parameter.</p>
434
 
<pre class="verbatim">        <span class="c"># 3</span>
435
 
        <a class="l_k" href="../functions/use.html">use</a> <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a> with <span class="cm">=&gt;</span> <span class="q">&#39;Math::BigInt::Lite&#39;</span><span class="cm">,</span> <a class="l_w" href="../lib.html">lib</a> <span class="cm">=&gt;</span> <span class="q">&#39;GMP,Pari&#39;</span><span class="sc">;</span></pre>
436
 
<p>There is no need for a "use Math::BigInt;" statement, even if you want to
437
 
use Math::BigInt's, since Math::BigFloat will needs Math::BigInt and thus
438
 
always loads it. But if you add it, add it <b>before</b>:</p>
439
 
<pre class="verbatim">        <span class="c"># 4</span>
440
 
        <a class="l_k" href="../functions/use.html">use</a> <a class="l_w" href="../Math/BigInt.html">Math::BigInt</a><span class="sc">;</span>
441
 
        <a class="l_k" href="../functions/use.html">use</a> <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a> with <span class="cm">=&gt;</span> <span class="q">&#39;Math::BigInt::Lite&#39;</span><span class="cm">,</span> <a class="l_w" href="../lib.html">lib</a> <span class="cm">=&gt;</span> <span class="q">&#39;GMP,Pari&#39;</span><span class="sc">;</span></pre>
442
 
<p>Notice that the module with the last <code class="inline"><a class="l_w" href="../lib.html">lib</a></code> will "win" and thus
443
 
it's lib will be used if the lib is available:</p>
444
 
<pre class="verbatim">        <span class="c"># 5</span>
445
 
        <a class="l_k" href="../functions/use.html">use</a> <a class="l_w" href="../Math/BigInt.html">Math::BigInt</a> <a class="l_w" href="../lib.html">lib</a> <span class="cm">=&gt;</span> <span class="q">&#39;Bar,Baz&#39;</span><span class="sc">;</span>
446
 
        <a class="l_k" href="../functions/use.html">use</a> <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a> with <span class="cm">=&gt;</span> <span class="q">&#39;Math::BigInt::Lite&#39;</span><span class="cm">,</span> <a class="l_w" href="../lib.html">lib</a> <span class="cm">=&gt;</span> <span class="q">&#39;Foo&#39;</span><span class="sc">;</span></pre>
447
 
<p>That would try to load Foo, Bar, Baz and Calc (in that order). Or in other
448
 
words, Math::BigFloat will try to retain previously loaded libs when you
449
 
don't specify it onem but if you specify one, it will try to load them.</p>
450
 
<p>Actually, the lib loading order would be "Bar,Baz,Calc", and then
451
 
"Foo,Bar,Baz,Calc", but independend of which lib exists, the result is the
452
 
same as trying the latter load alone, except for the fact that one of Bar or
453
 
Baz might be loaded needlessly in an intermidiate step (and thus hang around
454
 
and waste memory). If neither Bar nor Baz exist (or don't work/compile), they
455
 
will still be tried to be loaded, but this is not as time/memory consuming as
456
 
actually loading one of them. Still, this type of usage is not recommended due
457
 
to these issues.</p>
458
 
<p>The old way (loading the lib only in BigInt) still works though:</p>
459
 
<pre class="verbatim">        <span class="c"># 6</span>
460
 
        <a class="l_k" href="../functions/use.html">use</a> <a class="l_w" href="../Math/BigInt.html">Math::BigInt</a> <a class="l_w" href="../lib.html">lib</a> <span class="cm">=&gt;</span> <span class="q">&#39;Bar,Baz&#39;</span><span class="sc">;</span>
461
 
        <a class="l_k" href="../functions/use.html">use</a> <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a><span class="sc">;</span></pre>
462
 
<p>You can even load Math::BigInt afterwards:</p>
463
 
<pre class="verbatim">        <span class="c"># 7</span>
464
 
        <a class="l_k" href="../functions/use.html">use</a> <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a><span class="sc">;</span>
465
 
        <a class="l_k" href="../functions/use.html">use</a> <a class="l_w" href="../Math/BigInt.html">Math::BigInt</a> <a class="l_w" href="../lib.html">lib</a> <span class="cm">=&gt;</span> <span class="q">&#39;Bar,Baz&#39;</span><span class="sc">;</span></pre>
466
 
<p>But this has the same problems like #5, it will first load Calc
467
 
(Math::BigFloat needs Math::BigInt and thus loads it) and then later Bar or
468
 
Baz, depending on which of them works and is usable/loadable. Since this
469
 
loads Calc unnecc., it is not recommended.</p>
470
 
<p>Since it also possible to just require Math::BigFloat, this poses the question
471
 
about what libary this will use:</p>
472
 
<pre class="verbatim">  <a class="l_k" href="../functions/require.html">require</a> <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a><span class="sc">;</span>
473
 
        <a class="l_k" href="../functions/my.html">my</a> <span class="i">$x</span> = <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a>-&gt;new<span class="s">(</span><span class="n">123</span><span class="s">)</span><span class="sc">;</span> <span class="i">$x</span> += <span class="n">123</span><span class="sc">;</span></pre>
474
 
<p>It will use Calc. Please note that the call to import() is still done, but
475
 
only when you use for the first time some Math::BigFloat math (it is triggered
476
 
via any constructor, so the first time you create a Math::BigFloat, the load
477
 
will happen in the background). This means:</p>
478
 
<pre class="verbatim">  <a class="l_k" href="../functions/require.html">require</a> <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a><span class="sc">;</span>
479
 
        <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a>-&gt;import <span class="s">(</span> <a class="l_w" href="../lib.html">lib</a> <span class="cm">=&gt;</span> <span class="q">&#39;Foo,Bar&#39;</span> <span class="s">)</span><span class="sc">;</span></pre>
480
 
<p>would be the same as:</p>
481
 
<pre class="verbatim">  <a class="l_k" href="../functions/use.html">use</a> <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a> <a class="l_w" href="../lib.html">lib</a> <span class="cm">=&gt;</span> <span class="q">&#39;Foo, Bar&#39;</span><span class="sc">;</span></pre>
482
 
<p>But don't try to be clever to insert some operations in between:</p>
483
 
<pre class="verbatim">  <a class="l_k" href="../functions/require.html">require</a> <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a><span class="sc">;</span>
484
 
        <a class="l_k" href="../functions/my.html">my</a> <span class="i">$x</span> = <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a>-&gt;bone<span class="s">(</span><span class="s">)</span> + <span class="n">4</span><span class="sc">;</span>               <span class="c"># load BigInt and Calc</span>
485
 
        <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a>-&gt;import<span class="s">(</span> <a class="l_w" href="../lib.html">lib</a> <span class="cm">=&gt;</span> <span class="q">&#39;Pari&#39;</span> <span class="s">)</span><span class="sc">;</span>       <span class="c"># load Pari, too</span>
486
 
        <span class="i">$x</span> = <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a>-&gt;bone<span class="s">(</span><span class="s">)</span>+<span class="n">4</span><span class="sc">;</span>                   <span class="c"># now use Pari</span></pre>
487
 
<p>While this works, it loads Calc needlessly. But maybe you just wanted that?</p>
488
 
<p><b>Examples #3 is highly recommended</b> for daily usage.</p>
 
482
<p>For backwards compatibility reasons it is still possible to
 
483
request a different storage class for use with Math::BigFloat:</p>
 
484
<pre class="verbatim">        <a class="l_k" href="../functions/use.html">use</a> <span class="w">Math::BigFloat</span> <span class="w">with</span> <span class="cm">=&gt;</span> <span class="q">'Math::BigInt::Lite'</span><span class="sc">;</span></pre>
 
485
<p>However, this request is ignored, as the current code now uses the low-level
 
486
math libary for directly storing the number parts.</p>
 
487
<a name="EXPORTS"></a><h1>EXPORTS</h1>
 
488
<p><code class="inline"><span class="w">Math::BigFloat</span></code>
 
489
 exports nothing by default, but can export the <code class="inline"><span class="i">bpi</span><span class="s">(</span><span class="s">)</span></code>
 
490
 method:</p>
 
491
<pre class="verbatim">  <a class="l_k" href="../functions/use.html">use</a> <span class="w">Math::BigFloat</span> <span class="q">qw/bpi/</span><span class="sc">;</span></pre>
 
492
<pre class="verbatim">  <a class="l_k" href="../functions/print.html">print</a> <span class="i">bpi</span><span class="s">(</span><span class="n">10</span><span class="s">)</span><span class="cm">,</span> <span class="q">&quot;\n&quot;</span><span class="sc">;</span></pre>
489
493
<a name="BUGS"></a><h1>BUGS</h1>
490
494
<p>Please see the file BUGS in the CPAN distribution Math::BigInt for known bugs.</p>
491
495
<a name="CAVEATS"></a><h1>CAVEATS</h1>
 
496
<p>Do not try to be clever to insert some operations in between switching
 
497
libraries:</p>
 
498
<pre class="verbatim">  <a class="l_k" href="../functions/require.html">require</a> <span class="w">Math::BigFloat</span><span class="sc">;</span>
 
499
        <a class="l_k" href="../functions/my.html">my</a> <span class="i">$matter</span> = <span class="w">Math::BigFloat</span><span class="w">-&gt;bone</span><span class="s">(</span><span class="s">)</span> + <span class="n">4</span><span class="sc">;</span>    <span class="c"># load BigInt and Calc</span>
 
500
        <span class="w">Math::BigFloat</span><span class="w">-&gt;import</span><span class="s">(</span> <span class="w">lib</span> <span class="cm">=&gt;</span> <span class="q">'Pari'</span> <span class="s">)</span><span class="sc">;</span>        <span class="c"># load Pari, too</span>
 
501
        <a class="l_k" href="../functions/my.html">my</a> <span class="i">$anti_matter</span> = <span class="w">Math::BigFloat</span><span class="w">-&gt;bone</span><span class="s">(</span><span class="s">)</span>+<span class="n">4</span><span class="sc">;</span> <span class="c"># now use Pari</span></pre>
 
502
<p>This will create objects with numbers stored in two different backend libraries,
 
503
and <b>VERY BAD THINGS</b> will happen when you use these together:</p>
 
504
<pre class="verbatim">  <a class="l_k" href="../functions/my.html">my</a> <span class="i">$flash_and_bang</span> = <span class="i">$matter</span> + <span class="i">$anti_matter</span><span class="sc">;</span>        <span class="c"># Don't do this!</span></pre>
492
505
<ul>
493
506
<li><a name="stringify%2c-bstr()"></a><b>stringify, bstr()</b>
494
507
<p>Both stringify and bstr() now drop the leading '+'. The old code would return
496
509
reasoning and details.</p>
497
510
</li>
498
511
<li><a name="bdiv"></a><b>bdiv</b>
499
 
<p>The following will probably not do what you expect:</p>
 
512
<p>The following will probably not print what you expect:</p>
500
513
<pre class="verbatim">  <a class="l_k" href="../functions/print.html">print</a> <span class="i">$c</span><span class="i">-&gt;bdiv</span><span class="s">(</span><span class="n">123.456</span><span class="s">)</span><span class="cm">,</span><span class="q">&quot;\n&quot;</span><span class="sc">;</span></pre>
501
514
<p>It prints both quotient and reminder since print works in list context. Also,
502
 
bdiv() will modify $c, so be carefull. You probably want to use
503
 
        
504
 
        print $c / 123.456,"\n";
505
 
        print scalar $c-&gt;bdiv(123.456),"\n";  # or if you want to modify $c</p>
 
515
bdiv() will modify $c, so be careful. You probably want to use</p>
 
516
<pre class="verbatim">  <a class="l_k" href="../functions/print.html">print</a> <span class="i">$c</span> / <span class="n">123.456</span><span class="cm">,</span><span class="q">&quot;\n&quot;</span><span class="sc">;</span>
 
517
        <a class="l_k" href="../functions/print.html">print</a> <a class="l_k" href="../functions/scalar.html">scalar</a> <span class="i">$c</span><span class="i">-&gt;bdiv</span><span class="s">(</span><span class="n">123.456</span><span class="s">)</span><span class="cm">,</span><span class="q">&quot;\n&quot;</span><span class="sc">;</span>  <span class="c"># or if you want to modify $c</span></pre>
 
518
<p>instead.</p>
 
519
</li>
 
520
<li><a name="brsft"></a><b>brsft</b>
 
521
<p>The following will probably not print what you expect:</p>
 
522
<pre class="verbatim">  <a class="l_k" href="../functions/my.html">my</a> <span class="i">$c</span> = <span class="w">Math::BigFloat</span><span class="w">-&gt;new</span><span class="s">(</span><span class="q">'3.14159'</span><span class="s">)</span><span class="sc">;</span>
 
523
        <a class="l_k" href="../functions/print.html">print</a> <span class="i">$c</span><span class="i">-&gt;brsft</span><span class="s">(</span><span class="n">3</span><span class="cm">,</span><span class="n">10</span><span class="s">)</span><span class="cm">,</span><span class="q">&quot;\n&quot;</span><span class="sc">;</span>     <span class="c"># prints 0.00314153.1415</span></pre>
 
524
<p>It prints both quotient and remainder, since print calls <code class="inline"><span class="i">brsft</span><span class="s">(</span><span class="s">)</span></code>
 
525
 in list
 
526
context. Also, <code class="inline"><span class="i">$c</span><span class="i">-&gt;brsft</span><span class="s">(</span><span class="s">)</span></code>
 
527
 will modify $c, so be careful.
 
528
You probably want to use</p>
 
529
<pre class="verbatim">  <a class="l_k" href="../functions/print.html">print</a> <a class="l_k" href="../functions/scalar.html">scalar</a> <span class="i">$c</span><span class="i">-&gt;copy</span><span class="s">(</span><span class="s">)</span><span class="i">-&gt;brsft</span><span class="s">(</span><span class="n">3</span><span class="cm">,</span><span class="n">10</span><span class="s">)</span><span class="cm">,</span><span class="q">&quot;\n&quot;</span><span class="sc">;</span>
 
530
        <span class="c"># or if you really want to modify $c</span>
 
531
        <a class="l_k" href="../functions/print.html">print</a> <a class="l_k" href="../functions/scalar.html">scalar</a> <span class="i">$c</span><span class="i">-&gt;brsft</span><span class="s">(</span><span class="n">3</span><span class="cm">,</span><span class="n">10</span><span class="s">)</span><span class="cm">,</span><span class="q">&quot;\n&quot;</span><span class="sc">;</span></pre>
506
532
<p>instead.</p>
507
533
</li>
508
534
<li><a name="Modifying-and-%3d"></a><b>Modifying and =</b>
509
535
<p>Beware of:</p>
510
 
<pre class="verbatim">  <span class="i">$x</span> = <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a>-&gt;new<span class="s">(</span><span class="n">5</span><span class="s">)</span><span class="sc">;</span>
 
536
<pre class="verbatim">  <span class="i">$x</span> = <span class="w">Math::BigFloat</span><span class="w">-&gt;new</span><span class="s">(</span><span class="n">5</span><span class="s">)</span><span class="sc">;</span>
511
537
        <span class="i">$y</span> = <span class="i">$x</span><span class="sc">;</span></pre>
512
538
<p>It will not do what you think, e.g. making a copy of $x. Instead it just makes
513
539
a second reference to the <b>same</b> object and stores it in $y. Thus anything
522
548
 etc. The first will modify $x, the second one won't:</p>
523
549
<pre class="verbatim">  print bpow($x,$i),"\n";         # modify $x
524
550
        print $x-&gt;bpow($i),"\n";     # ditto
525
 
        print $x ** $i,"\n";            # leave $x alone </pre></li>
 
551
        print $x ** $i,"\n";            # leave $x alone</pre></li>
526
552
<li><a name="precision()-vs.-accuracy()"></a><b>precision() vs. accuracy()</b>
527
553
<p>A common pitfall is to use <i>precision()</i> when you want to round a result to
528
554
a certain number of digits:</p>
529
 
<pre class="verbatim">  <a class="l_k" href="../functions/use.html">use</a> <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a><span class="sc">;</span></pre>
530
 
<pre class="verbatim">  <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a>-&gt;precision<span class="s">(</span><span class="n">4</span><span class="s">)</span><span class="sc">;</span>           <span class="c"># does not do what you think it does</span>
531
 
        <a class="l_k" href="../functions/my.html">my</a> <span class="i">$x</span> = <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a>-&gt;new<span class="s">(</span><span class="n">12345</span><span class="s">)</span><span class="sc">;</span>       <span class="c"># rounds $x to &quot;12000&quot;!</span>
 
555
<pre class="verbatim">  <a class="l_k" href="../functions/use.html">use</a> <span class="w">Math::BigFloat</span><span class="sc">;</span></pre>
 
556
<pre class="verbatim">  <span class="w">Math::BigFloat</span><span class="w">-&gt;precision</span><span class="s">(</span><span class="n">4</span><span class="s">)</span><span class="sc">;</span>             <span class="c"># does not do what you think it does</span>
 
557
        <a class="l_k" href="../functions/my.html">my</a> <span class="i">$x</span> = <span class="w">Math::BigFloat</span><span class="w">-&gt;new</span><span class="s">(</span><span class="n">12345</span><span class="s">)</span><span class="sc">;</span> <span class="c"># rounds $x to &quot;12000&quot;!</span>
532
558
        <a class="l_k" href="../functions/print.html">print</a> <span class="q">&quot;$x\n&quot;</span><span class="sc">;</span>                                <span class="c"># print &quot;12000&quot;</span>
533
 
        <a class="l_k" href="../functions/my.html">my</a> <span class="i">$y</span> = <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a>-&gt;new<span class="s">(</span><span class="n">3</span><span class="s">)</span><span class="sc">;</span>           <span class="c"># rounds $y to &quot;0&quot;!</span>
 
559
        <a class="l_k" href="../functions/my.html">my</a> <span class="i">$y</span> = <span class="w">Math::BigFloat</span><span class="w">-&gt;new</span><span class="s">(</span><span class="n">3</span><span class="s">)</span><span class="sc">;</span>             <span class="c"># rounds $y to &quot;0&quot;!</span>
534
560
        <a class="l_k" href="../functions/print.html">print</a> <span class="q">&quot;$y\n&quot;</span><span class="sc">;</span>                                <span class="c"># print &quot;0&quot;</span>
535
561
        <span class="i">$z</span> = <span class="i">$x</span> / <span class="i">$y</span><span class="sc">;</span>                              <span class="c"># 12000 / 0 =&gt; NaN!</span>
536
562
        <a class="l_k" href="../functions/print.html">print</a> <span class="q">&quot;$z\n&quot;</span><span class="sc">;</span>
537
563
        <a class="l_k" href="../functions/print.html">print</a> <span class="i">$z</span><span class="i">-&gt;precision</span><span class="s">(</span><span class="s">)</span><span class="cm">,</span><span class="q">&quot;\n&quot;</span><span class="sc">;</span>           <span class="c"># 4</span></pre>
538
564
<p>Replacing <a href="http://search.cpan.org/perldoc/precision">precision</a> with <a href="http://search.cpan.org/perldoc/accuracy">accuracy</a> is probably not what you want, either:</p>
539
 
<pre class="verbatim">  <a class="l_k" href="../functions/use.html">use</a> <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a><span class="sc">;</span></pre>
540
 
<pre class="verbatim">  <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a>-&gt;accuracy<span class="s">(</span><span class="n">4</span><span class="s">)</span><span class="sc">;</span>            <span class="c"># enables global rounding:</span>
541
 
        <a class="l_k" href="../functions/my.html">my</a> <span class="i">$x</span> = <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a>-&gt;new<span class="s">(</span><span class="n">123456</span><span class="s">)</span><span class="sc">;</span>      <span class="c"># rounded immidiately to &quot;12350&quot;</span>
 
565
<pre class="verbatim">  <a class="l_k" href="../functions/use.html">use</a> <span class="w">Math::BigFloat</span><span class="sc">;</span></pre>
 
566
<pre class="verbatim">  <span class="w">Math::BigFloat</span><span class="w">-&gt;accuracy</span><span class="s">(</span><span class="n">4</span><span class="s">)</span><span class="sc">;</span>              <span class="c"># enables global rounding:</span>
 
567
        <a class="l_k" href="../functions/my.html">my</a> <span class="i">$x</span> = <span class="w">Math::BigFloat</span><span class="w">-&gt;new</span><span class="s">(</span><span class="n">123456</span><span class="s">)</span><span class="sc">;</span>        <span class="c"># rounded immediately to &quot;12350&quot;</span>
542
568
        <a class="l_k" href="../functions/print.html">print</a> <span class="q">&quot;$x\n&quot;</span><span class="sc">;</span>                                <span class="c"># print &quot;123500&quot;</span>
543
 
        <a class="l_k" href="../functions/my.html">my</a> <span class="i">$y</span> = <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a>-&gt;new<span class="s">(</span><span class="n">3</span><span class="s">)</span><span class="sc">;</span>           <span class="c"># rounded to &quot;3</span>
 
569
        <a class="l_k" href="../functions/my.html">my</a> <span class="i">$y</span> = <span class="w">Math::BigFloat</span><span class="w">-&gt;new</span><span class="s">(</span><span class="n">3</span><span class="s">)</span><span class="sc">;</span>             <span class="c"># rounded to &quot;3</span>
544
570
        <a class="l_k" href="../functions/print.html">print</a> <span class="q">&quot;$y\n&quot;</span><span class="sc">;</span>                                <span class="c"># print &quot;3&quot;</span>
545
571
        <a class="l_k" href="../functions/print.html">print</a> <span class="i">$z</span> = <span class="i">$x</span><span class="i">-&gt;copy</span><span class="s">(</span><span class="s">)</span><span class="i">-&gt;bdiv</span><span class="s">(</span><span class="i">$y</span><span class="s">)</span><span class="cm">,</span><span class="q">&quot;\n&quot;</span><span class="sc">;</span>   <span class="c"># 41170</span>
546
572
        <a class="l_k" href="../functions/print.html">print</a> <span class="i">$z</span><span class="i">-&gt;accuracy</span><span class="s">(</span><span class="s">)</span><span class="cm">,</span><span class="q">&quot;\n&quot;</span><span class="sc">;</span>            <span class="c"># 4</span></pre>
547
573
<p>What you want to use instead is:</p>
548
 
<pre class="verbatim">  <a class="l_k" href="../functions/use.html">use</a> <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a><span class="sc">;</span></pre>
549
 
<pre class="verbatim">  <a class="l_k" href="../functions/my.html">my</a> <span class="i">$x</span> = <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a>-&gt;new<span class="s">(</span><span class="n">123456</span><span class="s">)</span><span class="sc">;</span>      <span class="c"># no rounding</span>
 
574
<pre class="verbatim">  <a class="l_k" href="../functions/use.html">use</a> <span class="w">Math::BigFloat</span><span class="sc">;</span></pre>
 
575
<pre class="verbatim">  <a class="l_k" href="../functions/my.html">my</a> <span class="i">$x</span> = <span class="w">Math::BigFloat</span><span class="w">-&gt;new</span><span class="s">(</span><span class="n">123456</span><span class="s">)</span><span class="sc">;</span>        <span class="c"># no rounding</span>
550
576
        <a class="l_k" href="../functions/print.html">print</a> <span class="q">&quot;$x\n&quot;</span><span class="sc">;</span>                                <span class="c"># print &quot;123456&quot;</span>
551
 
        <a class="l_k" href="../functions/my.html">my</a> <span class="i">$y</span> = <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a>-&gt;new<span class="s">(</span><span class="n">3</span><span class="s">)</span><span class="sc">;</span>           <span class="c"># no rounding</span>
 
577
        <a class="l_k" href="../functions/my.html">my</a> <span class="i">$y</span> = <span class="w">Math::BigFloat</span><span class="w">-&gt;new</span><span class="s">(</span><span class="n">3</span><span class="s">)</span><span class="sc">;</span>             <span class="c"># no rounding</span>
552
578
        <a class="l_k" href="../functions/print.html">print</a> <span class="q">&quot;$y\n&quot;</span><span class="sc">;</span>                                <span class="c"># print &quot;3&quot;</span>
553
579
        <a class="l_k" href="../functions/print.html">print</a> <span class="i">$z</span> = <span class="i">$x</span><span class="i">-&gt;copy</span><span class="s">(</span><span class="s">)</span><span class="i">-&gt;bdiv</span><span class="s">(</span><span class="i">$y</span><span class="cm">,</span><span class="n">4</span><span class="s">)</span><span class="cm">,</span><span class="q">&quot;\n&quot;</span><span class="sc">;</span>  <span class="c"># 41150</span>
554
580
        <a class="l_k" href="../functions/print.html">print</a> <span class="i">$z</span><span class="i">-&gt;accuracy</span><span class="s">(</span><span class="s">)</span><span class="cm">,</span><span class="q">&quot;\n&quot;</span><span class="sc">;</span>            <span class="c"># undef</span></pre>
562
588
<a href="http://search.cpan.org/perldoc/Math::BigInt::BitVect">Math::BigInt::BitVect</a>, <a href="http://search.cpan.org/perldoc/Math::BigInt::Pari">Math::BigInt::Pari</a> and  <a href="http://search.cpan.org/perldoc/Math::BigInt::GMP">Math::BigInt::GMP</a>.</p>
563
589
<p>The pragmas <a href="../bignum.html">bignum</a>, <a href="../bigint.html">bigint</a> and <a href="../bigrat.html">bigrat</a> might also be of interest
564
590
because they solve the autoupgrading/downgrading issue, at least partly.</p>
565
 
<p>The package at
566
 
<a href="http://search.cpan.org/search?mode=module&amp;query=Math%3A%3ABigInt">http://search.cpan.org/search?mode=module&amp;query=Math%3A%3ABigInt</a> contains
 
591
<p>The package at <a href="http://search.cpan.org/~tels/Math-BigInt">http://search.cpan.org/~tels/Math-BigInt</a> contains
567
592
more documentation including a full version history, testcases, empty
568
593
subclass files and benchmarks.</p>
569
594
<a name="LICENSE"></a><h1>LICENSE</h1>
571
596
the same terms as Perl itself.</p>
572
597
<a name="AUTHORS"></a><h1>AUTHORS</h1>
573
598
<p>Mark Biggar, overloaded interface by Ilya Zakharevich.
574
 
Completely rewritten by Tels <a href="http://bloodgate.com">http://bloodgate.com</a> in 2001 - 2004, and still
575
 
at it in 2005.</p>
 
599
Completely rewritten by Tels <a href="http://bloodgate.com">http://bloodgate.com</a> in 2001 - 2006, and still
 
600
at it in 2007.</p>
576
601
</div>
577
602
      <div id="contentFooter"><a href="http://www.perl.org"><img src="../perlpowered.png" border=0></a></div>
578
603
    </div>
590
615
          <!--<select name="r"><option value="1" selected>Go to top result<option value="0">Show results list</select>-->
591
616
        </form>
592
617
      </p>
 
618
      <script language="JavaScript" type="text/javascript" src="/perl-version.js"></script>
593
619
      <h2>Labels:</h2>
594
620
      <p>
595
621
        <a href="#" onClick="addLabel('Math::BigFloat','Math/BigFloat.html')">Add this page</a>