©
This document uses PHP Chinese website manual Release
(PHP 4, PHP 5, PHP 7)
bcpow — 任意精度数字的成方
$left_operand
, string $right_operand
[, int $scale
] ) 左操作数
的右操作数
次方运算.
left_operand
字符串类型的左操作数.
right_operand
字符串类型的右操作数.
scale
此可选参数用于设置结果中小数点后的小数位数。也可通过使用 bcscale() 来设置全局默认的小数位数,用于所有函数。
返回结果为字符串类型.
Example #1 bcpow() 示例
<?php
echo bcpow ( '4.2' , '3' , 2 ); // 74.08
?>
Note:
bcpow() may return a result with fewer digits after the decimal point than the
scale
parameter would indicate. This only occurs when the result doesn't require all of the precision allowed by thescale
. For example:Example #2 bcpow() scale example
<?php
echo bcpow ( '5' , '2' , 2 ); // prints "25", not "25.00"
?>
[#1] thomas at tgohome dot com [2009-07-13 00:19:59]
<?php
bcscale(100);
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);
}
function bclog2($a, $iter = 10)
{
return bcdiv(bcln($a, $iter), bcln("2", $iter));
}
function bclog10($a, $iter = 10)
{
return bcdiv(bcln($a, $iter), bcln("10", $iter));
}
?>
[#2] [2005-02-11 13:58:39]
Well, if bcpow has limits, then this should work:
<?php
function bcpow_($num, $power) {
$awnser = "1";
while ($power) {
$awnser = bcmul($awnser, $num, 100);
$power = bcsub($power, "1");
}
return rtrim($awnser, '0.');
}
?>
Just that $power cannot have decimal digits in it.
[#3] Michael Bailey (jinxidoru at byu dot net) [2004-08-09 17:42:37]
bcpow() only supports exponents less than or equal to 2^31-1. Also, bcpow() does not support decimal numbers. If you have scale set to 0, then the exponent is converted to an interger; otherwise an error is generated.
--
Michael Bailey
http://www.jinxidoru.com