Matematica di Precisione Arbitraria BCMath

Introduzione

Per la matematica di precisione arbitraria PHP offre il Binary Calculator che supporta numeri di qualsiasi dimensione e precisione, rappresentandoli come stringhe.

  • Installazione/Configurazione
  • Funzioni BC Math
    • bcadd β€” Somma due numeri a precisione arbitraria
    • bcceil β€” Round up arbitrary precision number
    • bccomp β€” Confronta due numeri a precisione arbitraria
    • bcdiv β€” Divide due numeri a precisione arbitraria
    • bcdivmod β€” Get the quotient and modulus of an arbitrary precision number
    • bcfloor β€” Round down arbitrary precision number
    • bcmod β€” Ricava il modulo di un numero a precisione arbitraria
    • bcmul β€” Moltiplica due numeri a precisione arbitraria
    • bcpow β€” Effettua l'elevamento a potenza
    • bcpowmod β€” Effettua l'elevamento a potenza, applicando quindi il modulo
    • bcround β€” Round arbitrary precision number
    • 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
οΌ‹add a note

User Contributed Notes 3 notes

up
75
Hayley Watson ΒΆ
10 years ago
This extension is an interface to the GNU implementation as a library of the Basic Calculator utility by Philip Nelson; hence the name.
up
22
volek at adamv dot cz ΒΆ
11 years ago
Note that when you use implementation of factorial that ClaudiuS made, you get results even if you try to calculate factorial of number that you normally can't, e.g. 2.5, -2, etc. Here is safer implementation:
<?php
/**
 * Calculates a factorial of given number.
 * @param string|int $num
 * @throws InvalidArgumentException
 * @return string
 */
function bcfact($num)
{
    if (!filter_var($num, FILTER_VALIDATE_INT) || $num <= 0) {
        throw new InvalidArgumentException(sprintf('Argument must be natural number, "%s" given.', $num));
    }

    for ($result = '1'; $num > 0; $num--) {
        $result = bcmul($result, $num);
    }

    return $result;
}
?>
up
20
ClaudiuS ΒΆ
13 years ago
Needed to compute some permutations and found the BC extension great but poor on functions, so untill this gets implemented here's the factorial function:

<?php
/* BC FACTORIAL
 * n! = n * (n-1) * (n-2) .. 1 [eg. 5! = 5 * 4 * 3 * 2 * 1 = 120]
 */
function bcfact($n){
    $factorial=$n;
    while (--$n>1) $factorial=bcmul($factorial,$n);
    return $factorial;
}

print bcfact(50); 
//30414093201713378043612608166064768844377641568960512000000000000
?>