|
|
IV. Funzioni Matematiche BCMath a precisione arbitrariaIntroduzione
Per la matematica a precisione arbitraria PHP offre il Binary Calculator che
supporta numeri di qualsiasi dimensione e precisione, rappresentati da stringhe;
Requisiti
Dalla versione 4.0.4 del PHP, libbcmath � inclusa nella distribuzione. Non c'� bisogno di altre
librerie esterne per questa estensione.
Istallazione
In PHP 4, queste funzioni sono disponibili solo se il PHP � stato configurato con
--enable-bcmath.
In PHP 3, queste funzioni sono disponibili solo se il PHP non � stato configurato con
--disable-bcmath.
Configurazione RuntimeQuesta estensione non definisce
alcuna direttiva di configurazione Resource TypeQuesta estensione non definisce alcun tipo di risorsa. Costanti PredefiniteQuesta estensione non definisce alcuna costante. - Sommario
- bcadd -- Somma due numeri a precisione arbitraria
- bccomp -- Confronta due numeri a precisione arbitraria
- bcdiv -- Divide due numeri a precisione arbitraria
- bcmod --
Ricava il modulo di un numero a precisione arbitraria
- bcmul -- Moltiplica due numeri a precisione arbitraria
- bcpow --
Effettual l'elevamento a potenza
- bcscale --
Imposta il valore di precisione di default per tutte le funzioni matematich BCMath
- bcsqrt --
Ottiene la radice quadrata di un numero a precisione arbitraria
- bcsub --
Sottrae un numero a precisione arbitraria da un altro
User Contributed Notes Funzioni Matematiche BCMath a precisione arbitraria |
|
[email protected]
06-Apr-2001 11:23 |
|
The README.BCMATH currently reads:
As of PHP 4.0.4, the BC math
library routines are bundled in the
standard PHP distribution. There
is no need to install any additional
files.
Thanks goes to
Phil Nelson, for releasing the BC math library routines
under the
LGPL.
|
|
benjcarson at digitaljunkies ca
07-Jul-2002 11:17 |
|
Note that bcmath doesn't seem to handle numbers in exponential notation
(i.e. "1e4"), although PHP considers such a value a
number.
example:
$exp1 = "1E5"; $exp2 =
"2E4"; $ans1 = bcadd($exp1, $exp2, 3); $ans2 = $exp1 +
exp2; echo("bcadd: $exp1 + $exp2 =
$ans1"); echo("php: $exp1 + $exp2 = $ans2");
//
Output: bcadd: 1E5 + 2E4 = 0.000 php: 1E5 + 2E4 = 120000
Just
a gotcha if you're using passing PHP numbers into bcmath functions...
|
|
benjcarson at digitaljunkies dot ca
08-Jul-2002 12:00 |
|
In addition to my last note, here are a quick pair of functions to convert
exponential notation values into bcmath-style number strings:
//
exp2int converts numbers in the // form "1.5e4" into
strings function exp2int($exp) { list($mantissa, $exponent) =
spliti("e", $exp); list($int, $dec) = split("\.",
$mantissa); bcscale ($dec); return bcmul($mantissa,
bcpow("10", $exponent)); }
// float2exp converts
floats into exponential notation function float2exp($num) {
if
(0 == $num) { return "0E1";} list($int, $dec) =
split("\.", $num);
// Extract sign if ($int[0] ==
"+" || $int[0] == "-") { $sign = substr($int,
0,1); $int = substr($int, 1); }
if (strlen($int)
<= 1) { // abs($num) is less than 1 $i=0; for ($i=0;
$dec[$i]=='0' && $i < strlen($dec); $i++); $exp =
-$i-1; $mantissa =
substr($dec,$i,1).".".substr($dec,$i+1);
} else { // abs($num) is greater than 1 $i=0;
for ($i=0; $int[$i]=='0' && $i < strlen($int); $i++);
$exp = strlen($int)-1 - $i; $mantissa =
substr($int,$i,1).".".substr($int,$i+1).$dec; }
return ($sign . $mantissa . "E" . $exp); }
|
|
|
| |