<?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));
}
?>
bcpow
(PHP 4, PHP 5)
bcpow — 任意精度数値をべき乗する
説明
string bcpow
( string
$left_operand
, string $right_operand
[, int $scale
] )
left_operand の
right_operand 乗を求めます。
パラメータ
-
left_operand -
左オペランドを表す文字列。
-
right_operand -
右オペランドを表す文字列。
-
scale -
このオプションパラメータを使用して、 結果の小数点以下の桁数を指定します。すべての関数で使用するデフォルトのスケールを定義するには bcscale() を使用します。
返り値
結果を文字列で返します。
例
例1 bcpow() の例
<?php
echo bcpow('4.2', '3', 2); // 74.08
?>
注意
注意:
bcpow() の返す結果の小数点以下の桁数は、
scaleパラメータで指定したものより少なくなる可能性があります。 結果を表すのにscaleで指定した桁数が不要な場合にのみそうなります。たとえば次のような場合です。例2 bcpow() での桁数の例
<?php
echo bcpow('5', '2', 2); // 結果は "25.00" ではなく "25" となります
?>
thomas at tgohome dot com
12-Jul-2009 06:19
11-Feb-2005 06:58
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.
Michael Bailey (jinxidoru at byu dot net)
09-Aug-2004 11:42
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
