bcpow()
(PHP 4, PHP 5, PHP 7)
任意精度数字的乘方
说明
bcpow(string $left_operand,string $right_operand[,int $scale]): string
左操作数
的右操作数
次方运算.
参数
- $left_operand
字符串类型的左操作数.
- $right_operand
字符串类型的右操作数.
- $scale
此可选参数用于设置结果中小数点后的小数位数。也可通过使用bcscale()来设置全局默认的小数位数,用于所有函数。
返回值
返回结果为字符串类型.
范例
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$scaleparameter would indicate. This only occurs when the result doesn't require all of the precision allowed by the$scale. For example:
bcpow() scale example
<?php echo bcpow('5', '2', 2); // prints "25", not "25.00" ?>
参见
bcpowmod()
Raise an arbitrary precision number to another, reduced by a specified modulusbcsqrt()
任意精度数字的二次方根
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.
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
<?php bcscale(100); /* * Computes the natural logarithm using a series. * @author Thomas Oldbury. * @license Public domain. */ 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); } /* * Computes the base2 log using baseN log. * @note Requires above functions. * @author Thomas Oldbury. * @license Public domain. */ function bclog2($a, $iter = 10) { return bcdiv(bcln($a, $iter), bcln("2", $iter)); } /* * Computes the base10 log using baseN log. * @note Requires above functions. * @author Thomas Oldbury. * @license Public domain. */ function bclog10($a, $iter = 10) { return bcdiv(bcln($a, $iter), bcln("10", $iter)); } ?>