2024年PHP开发者大会(日本)

bcpow

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

bcpow将任意精度数字提高到另一个数字的幂

描述

bcpow(字符串 $num, 字符串 $exponent, ?整数 $scale = null): 字符串

num 提升到 exponent 的幂。

参数

num

底数,作为字符串。

exponent

指数,作为字符串。必须是无小数部分的值。指数的有效范围是特定于平台的,但至少为-21474836482147483647

scale
此参数用于设置结果中小数点后的位数。如果为null,它将默认为使用bcscale()设置的默认比例,或回退到bcmath.scale INI指令的值。

返回值

返回结果作为字符串。

错误/异常

此函数在以下情况下抛出ValueError异常

  • numexponent 不是格式良好的 BCMath 数字字符串
  • exponent 具有小数部分
  • exponentscale 超出有效范围

如果num0exponent 为负值,则此函数将抛出DivisionByZeroError异常。

变更日志

版本 描述
8.4.0 0 的负幂以前返回 0,但现在会抛出DivisionByZeroError异常。
8.0.0 exponent 具有小数部分时,它现在会抛出ValueError异常,而不是截断。
7.3.0 bcpow() 现在返回具有请求比例的数字。以前,返回的数字可能省略了尾随的十进制零。

示例

示例 #1 bcpow() 示例

<?php

echo bcpow('4.2', '3', 2); // 74.08

?>

备注

注意:

在PHP 7.3.0之前,bcpow()可能返回的结果中小数点后的位数少于scale参数指示的位数。这仅在结果不需要scale允许的所有精度时才会发生。例如

示例 #2 bcpow() 比例示例

<?php
echo bcpow('5', '2', 2); // 输出 "25",而不是 "25.00"
?>

参见

  • bcpowmod() - 将任意精度数字提高到另一个数字的幂,并由指定的模数进行约简
  • bcsqrt() - 获取任意精度数字的平方根

添加备注

用户贡献的笔记 3 条笔记

-1
Michael Bailey (jinxidoru at byu dot net)
20年前
bcpow() 只支持小于或等于 2^31-1 的指数。此外,bcpow() 不支持十进制数。如果将 scale 设置为 0,则指数将转换为整数;否则会生成错误。

--
Michael Bailey
http://www.jinxidoru.com
-2
thomas at tgohome dot com
15年前
<?php

bcscale
(100);

/*
* 使用级数计算自然对数。
* @author Thomas Oldbury。
* @license 公共领域。
*/
function bcln($a, $iter = 10)
{
$result = "0.0";

for(
$i = 0; $i < $iter; $i++)
{
$pow = (1 + (2 * $i));
$mul = bcdiv("1.0", $pow);
$fraction = bcmul($mul, bcpow(bcsub($a, "1.0") / bcadd($a, "1.0"), $pow));
$result = bcadd($fraction, $result);
}

return
bcmul("2.0", $result);
}

/*
* 使用 baseN 对数计算 base2 对数。
* @note 需要上述函数。
* @author Thomas Oldbury。
* @license 公共领域。
*/
function bclog2($a, $iter = 10)
{
return
bcdiv(bcln($a, $iter), bcln("2", $iter));
}

/*
* 使用 baseN 对数计算 base10 对数。
* @note 需要上述函数。
* @author Thomas Oldbury。
* @license 公共领域。
*/
function bclog10($a, $iter = 10)
{
return
bcdiv(bcln($a, $iter), bcln("10", $iter));
}


?>
-3
匿名用户
19年前
如果 bcpow 有限制,那么这个应该有效
<?php
function bcpow_($num, $power) {
$awnser = "1";
while (
$power) {
$awnser = bcmul($awnser, $num, 100);
$power = bcsub($power, "1");
}
return
rtrim($awnser, '0.');
}
?>
需要注意的是,$power的值不能包含小数位。
To Top