ConFoo 2025

BCMath 任意精度数学関数

  • はじめに
  • インストール/設定
  • BC Math 関数
    • bcadd — 2つの任意精度の数値を加算する
    • bcceil — Round up arbitrary precision number
    • bccomp — 2 つの任意精度数値を比較する
    • bcdiv — 2つの任意精度数値で除算を行う
    • bcdivmod — Get the quotient and modulus of an arbitrary precision number
    • bcfloor — Round down arbitrary precision number
    • bcmod — 2 つの任意精度数値の剰余を取得する
    • bcmul — 2つの任意精度数値の乗算を行う
    • bcpow — 任意精度数値をべき乗する
    • bcpowmod — 任意精度数値のべき乗の、指定した数値による剰余
    • bcround — Round arbitrary precision number
    • bcscale — すべての BC 演算関数におけるデフォルトのスケールを設定/取得する
    • bcsqrt — 任意精度数値の平方根を取得する
    • bcsub — 任意精度数値の減算を行う
add a note

User Contributed Notes 3 notes

up
77
Hayley Watson
9 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
26
volek at adamv dot cz
9 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
18
ClaudiuS
11 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
?>
To Top