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>->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>->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>->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>->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>->binf<span class="s">(</span><span class="q">'-'</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>->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>->bone<span class="s">(</span><span class="q">'-'</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">->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">->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">->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">->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">->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">->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">->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">->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">->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">->new</span><span class="s">(</span><span class="n">1</span><span class="s">)</span><span class="i">->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">->new</span><span class="s">(</span><span class="n">1</span><span class="s">)</span><span class="i">->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">->new</span><span class="s">(</span><span class="n">1</span><span class="s">)</span><span class="i">->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">->new</span><span class="s">(</span> <span class="n">1</span> <span class="s">)</span><span class="i">->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">->new</span><span class="s">(</span> <span class="n">1</span> <span class="s">)</span><span class="i">->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">->new</span><span class="s">(</span> <span class="n">-2</span> <span class="s">)</span><span class="i">->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">->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">->is_nan</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span> <span class="c"># true if arg is NaN</span>
127
138
<span class="i">$x</span><span class="i">->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">->bnot</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span> <span class="c"># two's complement (bit wise not)</span>
129
140
<span class="i">$x</span><span class="i">->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">->bdec</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span> <span class="c"># decrement x by 1</span>
132
<span class="i">$x</span><span class="i">->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">->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">->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">->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">->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">->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">->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">->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">->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">->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>
143
<span class="i">$x</span><span class="i">->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>
149
<span class="i">$x</span><span class="i">->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">->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">->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">->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">->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>
146
<span class="i">$x</span><span class="i">->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">->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">->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">->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">->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">->bnot</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span> <span class="c"># bit-wise not (two's complement)</span>
151
<span class="i">$x</span><span class="i">->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">->bnot</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span> <span class="c"># bit-wise not (two's complement)</span></pre>
160
<pre class="verbatim"> <span class="i">$x</span><span class="i">->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">->broot</span><span class="s">(</span><span class="i">$y</span><span class="s">)</span><span class="sc">;</span> <span class="c"># $y'th root of $x (e.g. $y == 3 => cubic root)</span>
153
<span class="i">$x</span><span class="i">->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>
155
<span class="i">$x</span><span class="i">->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">->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">->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">->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">->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">->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>
163
<span class="i">$x</span><span class="i">->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">->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">->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">->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">->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">->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">->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">->length</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span> <span class="c"># number of digits (w/o sign and '.')</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">->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">->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">->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">->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">->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">->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>->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>->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>->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">->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">->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">->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">'12_3.456_789_123_456_789E-2'</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">'12_3.456_789_123_456_789E-2'</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>
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
277
<pre class="verbatim"> <span class="i">$d</span> = <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a>->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>->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">->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">->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>
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>->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>->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">->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">->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">->copy</span><span class="s">(</span><span class="s">)</span><span class="i">->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">->copy</span><span class="s">(</span><span class="s">)</span><span class="i">->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">->copy</span><span class="s">(</span><span class="s">)</span><span class="i">->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">'odd'</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>->round_mode<span class="s">(</span><span class="q">'zero'</span><span class="s">)</span><span class="sc">;</span>
296
<span class="w">Math::BigFloat</span><span class="w">->round_mode</span><span class="s">(</span><span class="q">'zero'</span><span class="s">)</span><span class="sc">;</span>
290
297
<span class="i">$y</span> = <span class="i">$x</span><span class="i">->copy</span><span class="s">(</span><span class="s">)</span><span class="i">->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>->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>->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">->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">->precision</span><span class="s">(</span><span class="s">)</span></code>
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>->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">->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">->copy</span><span class="s">(</span><span class="s">)</span><span class="i">->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">->bround</span><span class="s">(</span><span class="n">5</span><span class="s">)</span><span class="cm">,</span><span class="q">"\n"</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>->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">->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">->copy</span><span class="s">(</span><span class="s">)</span><span class="i">->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">"$y\n"</span><span class="sc">;</span></pre>
311
318
<a name="Rounding"></a><h2>Rounding</h2>
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>
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>
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>
349
<pre class="verbatim"> <span class="i">$x</span> = <a class="l_w" href="../Math/BigFloat.html">Math::BigFloat</a>->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">->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">->as_number</span><span class="s">(</span><span class="q">'odd'</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
352
363
<a name="accuracy"></a><h2>accuracy</h2>
353
364
<pre class="verbatim"> <span class="i">$x</span><span class="i">->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->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">->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">->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->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">->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->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">->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>->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>->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">->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">->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">->copy</span><span class="s">(</span><span class="s">)</span><span class="i">->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">->copy</span><span class="s">(</span><span class="s">)</span><span class="i">->bdiv</span><span class="s">(</span><span class="i">$y</span><span class="s">)</span><span class="i">->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">->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">->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->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">->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->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->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">->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">->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">->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">->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">->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!
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">->bpi</span><span class="s">(</span><span class="n">100</span><span class="s">)</span><span class="cm">,</span> <span class="q">"\n"</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">->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">->bcos</span><span class="s">(</span><span class="n">100</span><span class="s">)</span><span class="cm">,</span> <span class="q">"\n"</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">->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">->bsin</span><span class="s">(</span><span class="n">100</span><span class="s">)</span><span class="cm">,</span> <span class="q">"\n"</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">->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">->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">->batan2</span><span class="s">(</span><span class="i">$x</span><span class="s">)</span><span class="cm">,</span> <span class="q">"\n"</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">->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">->batan</span><span class="s">(</span><span class="n">100</span><span class="s">)</span><span class="cm">,</span> <span class="q">"\n"</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">->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">':constant'</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">':constant'</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>
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">=></span> <span class="q">'Calc'</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">=></span> <span class="q">'Calc'</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">=></span> <span class="q">'BitVect'</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">=></span> <span class="q">'GMP'</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">=></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">=></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">=></span> <span class="q">'Foo,Math::BigInt::Bar'</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
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">=></span> <span class="q">'Foo,Math::BigInt::Bar'</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
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">=></span> <span class="q">'GMP'</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">=></span> <span class="q">'GMP'</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">=></span> <span class="q">'GMP'</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">=></span> <span class="q">'GMP'</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">=></span> <span class="q">'Math::BigInt::Lite'</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">=></span> <span class="q">'Math::BigInt::Lite'</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">=></span> <span class="q">'Math::BigInt::Lite'</span><span class="cm">,</span> <a class="l_w" href="../lib.html">lib</a> <span class="cm">=></span> <span class="q">'GMP,Pari'</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">=></span> <span class="q">'Math::BigInt::Lite'</span><span class="cm">,</span> <a class="l_w" href="../lib.html">lib</a> <span class="cm">=></span> <span class="q">'GMP,Pari'</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">=></span> <span class="q">'Bar,Baz'</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">=></span> <span class="q">'Math::BigInt::Lite'</span><span class="cm">,</span> <a class="l_w" href="../lib.html">lib</a> <span class="cm">=></span> <span class="q">'Foo'</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
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">=></span> <span class="q">'Bar,Baz'</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">=></span> <span class="q">'Bar,Baz'</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>->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>->import <span class="s">(</span> <a class="l_w" href="../lib.html">lib</a> <span class="cm">=></span> <span class="q">'Foo,Bar'</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">=></span> <span class="q">'Foo, Bar'</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>->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>->import<span class="s">(</span> <a class="l_w" href="../lib.html">lib</a> <span class="cm">=></span> <span class="q">'Pari'</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>->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">=></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>
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">"\n"</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
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">->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">->import</span><span class="s">(</span> <span class="w">lib</span> <span class="cm">=></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">->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>
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>
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">->bdiv</span><span class="s">(</span><span class="n">123.456</span><span class="s">)</span><span class="cm">,</span><span class="q">"\n"</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
504
print $c / 123.456,"\n";
505
print scalar $c->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">"\n"</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">->bdiv</span><span class="s">(</span><span class="n">123.456</span><span class="s">)</span><span class="cm">,</span><span class="q">"\n"</span><span class="sc">;</span> <span class="c"># or if you want to modify $c</span></pre>
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">->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">->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">"\n"</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>
526
context. Also, <code class="inline"><span class="i">$c</span><span class="i">->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">->copy</span><span class="s">(</span><span class="s">)</span><span class="i">->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">"\n"</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">->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">"\n"</span><span class="sc">;</span></pre>
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>->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">->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->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>->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>->new<span class="s">(</span><span class="n">12345</span><span class="s">)</span><span class="sc">;</span> <span class="c"># rounds $x to "12000"!</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">->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">->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 "12000"!</span>
532
558
<a class="l_k" href="../functions/print.html">print</a> <span class="q">"$x\n"</span><span class="sc">;</span> <span class="c"># print "12000"</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>->new<span class="s">(</span><span class="n">3</span><span class="s">)</span><span class="sc">;</span> <span class="c"># rounds $y to "0"!</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">->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 "0"!</span>
534
560
<a class="l_k" href="../functions/print.html">print</a> <span class="q">"$y\n"</span><span class="sc">;</span> <span class="c"># print "0"</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 => NaN!</span>
536
562
<a class="l_k" href="../functions/print.html">print</a> <span class="q">"$z\n"</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">->precision</span><span class="s">(</span><span class="s">)</span><span class="cm">,</span><span class="q">"\n"</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>->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>->new<span class="s">(</span><span class="n">123456</span><span class="s">)</span><span class="sc">;</span> <span class="c"># rounded immidiately to "12350"</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">->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">->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 "12350"</span>
542
568
<a class="l_k" href="../functions/print.html">print</a> <span class="q">"$x\n"</span><span class="sc">;</span> <span class="c"># print "123500"</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>->new<span class="s">(</span><span class="n">3</span><span class="s">)</span><span class="sc">;</span> <span class="c"># rounded to "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">->new</span><span class="s">(</span><span class="n">3</span><span class="s">)</span><span class="sc">;</span> <span class="c"># rounded to "3</span>
544
570
<a class="l_k" href="../functions/print.html">print</a> <span class="q">"$y\n"</span><span class="sc">;</span> <span class="c"># print "3"</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">->copy</span><span class="s">(</span><span class="s">)</span><span class="i">->bdiv</span><span class="s">(</span><span class="i">$y</span><span class="s">)</span><span class="cm">,</span><span class="q">"\n"</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">->accuracy</span><span class="s">(</span><span class="s">)</span><span class="cm">,</span><span class="q">"\n"</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>->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">->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">"$x\n"</span><span class="sc">;</span> <span class="c"># print "123456"</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>->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">->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">"$y\n"</span><span class="sc">;</span> <span class="c"># print "3"</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">->copy</span><span class="s">(</span><span class="s">)</span><span class="i">->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">"\n"</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">->accuracy</span><span class="s">(</span><span class="s">)</span><span class="cm">,</span><span class="q">"\n"</span><span class="sc">;</span> <span class="c"># undef</span></pre>