bcdiv

(PHP 4, PHP 5, PHP 7, PHP 8)

bcdivDivise deux nombres de grande taille

Description

bcdiv(string $num1, string $num2, ?int $scale = null): string

Divise num1 par num2.

Liste de paramètres

num1

Le dividende, sous la forme d'une chaîne de caractères.

num2

Le diviseur, sous la forme d'une chaîne de caractères.

scale
Ce paramètre est utilisé pour définir le nombre de chiffres après la virgule dans le résultat. Si null, il prendra par défaut la valeur définie par bcscale(), ou, à défaut, la valeur de la directive INI bcmath.scale.

Valeurs de retour

Retourne le résultat de la division, sous la forme d'une chaîne de caractères.

Erreurs / Exceptions

Cette fonction lève une exception ValueError dans les cas suivants :

  • num1 ou num2 n'est pas une chaîne numérique BCMath correctement formée.
  • scale est en dehors de la plage valide.

Cette fonction lève une exception DivisionByZeroError si num2 est égal à 0.

Historique

Version Description
8.0.0 scale est désormais nullable.
8.0.0 La division par 0 lève désormais une exception DivisionByZeroError au lieu de retourner null.

Exemples

Exemple #1 Exemple avec bcdiv()

<?php

echo bcdiv('105', '6.55957', 3); // 16.007

?>

Voir aussi

  • bcmul() - Multiplie deux nombres de grande taille
  • bcdivmod() - Renvoie le quotient et le reste d'un nombre de précision arbitraire
  • bcmod() - Retourne le reste d'une division entre nombres de grande taille

add a note

User Contributed Notes 1 note

up
0
MM
16 years ago
Perhaps some one can find useful this function to compute the modular inverse of a integer (extended euclidean algorithm):

function invmod($a,$b) {
$n=$b;
$x=0; $lx=1; $y=1; $ly=0;
while ($b) {
$t=$b;
$q=bcdiv($a,$b,0);
$b=bcmod($a,$b);
$a=$t;
$t=$x; $x=bcsub($lx,bcmod(bcmul($q,$x),$n)); $lx=$t;
$t=$y; $y=bcsub($ly,bcmod(bcmul($q,$y),$n)); $ly=$t;
}
if (bccomp($lx,0) == -1)
$lx=bcadd($lx,$n);
return $lx;
}

// verify

$n="2447995268898324993537772139997802321";
$t="64941057316178801556773346239351236811";
$m="123456789";
$i=invmod($t,$n);
// (t*m)*inv(t) is m
echo bcmod(bcmul(bcmod(bcmul($t,$m),$n),$i),$n) == $m;
To Top