CakeFest 2024: The Official CakePHP Conference

bcpow

(PHP 4, PHP 5, PHP 7, PHP 8)

bcpow任意精度数値をべき乗する

説明

bcpow(string $num, string $exponent, ?int $scale = null): string

numexponent 乗を求めます。

パラメータ

num

基数を表す文字列。

exponent

指数を表す文字列。 指数が整数でない場合、値は切り捨てられます。 正しい指数の範囲はプラットフォーム依存ですが、 少なくとも -2147483648 から 2147483647 までの範囲を持ちます。

scale

このオプションパラメータを使用して、結果の小数点以下の桁数を指定します。省略した場合は、bcscale() 関数でグローバルに設定した桁数をデフォルトとして使用します。それも設定されていない場合は 0 を使用します。

戻り値

結果を文字列で返します。

変更履歴

バージョン 説明
7.3.0 bcpow() 関数は、指定されたスケールで値を返すようになりました。 これより前のバージョンでは、後に続く0の桁が省略された数値が返される可能性がありました。

例1 bcpow() の例

<?php

echo bcpow('4.2', '3', 2); // 74.08

?>

注意

注意:

PHP 7.3.0 より前のバージョンでは、 bcmul()scale 引数で指定したものより少ない桁数を返す可能性がありました。 これは scale で許された精度が不要な場合にだけ起きていました。 たとえば、以下のような場合です:

例2 bcpow() で scale を指定する例

<?php
echo bcpow('5', '2', 2); // 結果は "25.00" ではなく "25" となります
?>

参考

  • bcpowmod() - 任意精度数値のべき乗の、指定した数値による剰余
  • bcsqrt() - 任意精度数値の平方根を取得する

add a note

User Contributed Notes 3 notes

up
-1
Michael Bailey (jinxidoru at byu dot net)
19 years ago
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
up
-2
thomas at tgohome dot com
14 years ago
<?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));
}


?>
up
-3
Anonymous
19 years ago
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.
To Top