bcpow() 只支持小于或等于 2^31-1 的指数。此外,bcpow() 不支持十进制数。如果将 scale 设置为 0,则指数将转换为整数;否则会生成错误。
--
Michael Bailey
http://www.jinxidoru.com
(PHP 4, PHP 5, PHP 7, PHP 8)
bcpow — 将任意精度数字提高到另一个数字的幂
num
底数,作为字符串。
exponent
指数,作为字符串。必须是无小数部分的值。指数的有效范围是特定于平台的,但至少为-2147483648
到 2147483647
。
scale
null
,它将默认为使用bcscale()设置的默认比例,或回退到bcmath.scale
INI指令的值。
返回结果作为字符串。
此函数在以下情况下抛出ValueError异常
num
或 exponent
不是格式良好的 BCMath 数字字符串exponent
具有小数部分exponent
或 scale
超出有效范围如果num
为0
且exponent
为负值,则此函数将抛出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"
?>
bcpow() 只支持小于或等于 2^31-1 的指数。此外,bcpow() 不支持十进制数。如果将 scale 设置为 0,则指数将转换为整数;否则会生成错误。
--
Michael Bailey
http://www.jinxidoru.com
<?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));
}
?>