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
此可选参数用于设置结果中小数点后的位数。如果省略,它将默认设置为使用 bcscale() 函数全局设置的 scale,或者如果未设置则回退到 0
。
将结果作为字符串返回。
版本 | 说明 |
---|---|
7.3.0 | bcpow() 现在返回具有请求的 scale 的数字。以前,返回的数字可能省略了尾随的小数零。 |
示例 #1 bcpow() 示例
<?php
echo bcpow('4.2', '3', 2); // 74.08
?>
注意:
在 PHP 7.3.0 之前,bcpow() 可能返回的结果中小数点后的位数少于
scale
参数指示的位数。这种情况仅发生在结果不需要scale
允许的所有精度时。例如示例 #2 bcpow() scale 示例
<?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 对数计算以 2 为底的对数。
* @note 需要以上函数。
* @author Thomas Oldbury.
* @license 公共领域。
*/
function bclog2($a, $iter = 10)
{
return bcdiv(bcln($a, $iter), bcln("2", $iter));
}
/*
* 使用 baseN 对数计算以 10 为底的对数。
* @note 需要以上函数。
* @author Thomas Oldbury.
* @license 公共领域。
*/
function bclog10($a, $iter = 10)
{
return bcdiv(bcln($a, $iter), bcln("10", $iter));
}
?>