2024年PHP日本大会

BCMath任意精度数学

  • 简介
  • 安装/配置
  • BC Math 函数
    • bcadd — 加两个任意精度的数
    • bcceil — 向上舍入任意精度的数
    • bccomp — 比较两个任意精度的数
    • bcdiv — 除两个任意精度的数
    • bcdivmod — 获取任意精度数的商和模
    • bcfloor — 向下舍入任意精度的数
    • bcmod — 获取任意精度数的模
    • bcmul — 乘两个任意精度的数
    • bcpow — 将任意精度数提高到另一个数的幂
    • bcpowmod — 将任意精度数提高到另一个数的幂,并由指定的模数减少
    • bcround — 舍入任意精度数
    • bcscale — 设置或获取所有 bc 数学函数的默认 scale 参数
    • bcsqrt — 获取任意精度数的平方根
    • bcsub — 从另一个任意精度数中减去一个任意精度数
添加笔记

用户贡献笔记 3 条笔记

Hayley Watson
9年前
此扩展是 Philip Nelson 编写的基本计算器实用程序的 GNU 实现(作为库)的接口;因此得名。
volek at adamv dot cz
9年前
请注意,当您使用 ClaudiuS 编写的阶乘实现时,即使您尝试计算通常无法计算的数字(例如 2.5、-2 等)的阶乘,您也会获得结果。这是一个更安全的实现
<?php
/**
* 计算给定数字的阶乘。
* @param string|int $num
* @throws InvalidArgumentException
* @return string
*/
function bcfact($num)
{
if (!
filter_var($num, FILTER_VALIDATE_INT) || $num <= 0) {
throw new
InvalidArgumentException(sprintf('参数必须是自然数,给定的是 "%s".', $num));
}

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

return
$result;
}
?>
ClaudiuS
11年前
需要计算一些排列组合,发现 BC 扩展很棒,但在函数方面很差,所以在实现之前,这里有一个阶乘函数

<?php
/* BC 阶乘
* n! = n * (n-1) * (n-2) .. 1 [例如 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