bcpow() 只支援小於或等於 2^31-1 的指數。此外,bcpow() 不支援小數。如果將小數位數設定為 0,則指數會轉換為整數;否則會產生錯誤。
--
Michael Bailey
http://www.jinxidoru.com
(PHP 4, PHP 5, PHP 7, PHP 8)
bcpow — 任意精度數的次方運算
num
底數,以字串表示。
exponent
指數,以字串表示。必須是沒有小數部分的值。指數的有效範圍因平台而異,但至少介於 -2147483648
到 2147483647
之間。
scale
null
,它將預設為使用 bcscale() 設定的預設小數位數,或 fallback 至 bcmath.scale
INI 指令的值。
以字串形式返回結果。
此函式在下列情況下會拋出 ValueError 例外:
num
或 exponent
不是格式正確的 BCMath 數字字串exponent
具有小數部分exponent
或 scale
超出有效範圍如果 num
為 0
且 exponent
為負值,此函式會拋出 DivisionByZeroError 例外。
版本 | 說明 |
---|---|
8.4.0 | 0 的負次方先前會返回 0,但現在會拋出 DivisionByZeroError 例外。 |
8.0.0 | 當 exponent 具有小數部分時,現在會拋出 ValueError 例外,而不是截斷小數部分。 |
7.3.0 | bcpow() 現在會以要求的小數位數返回數字。以前,返回的數字可能會省略尾隨的小數零。 |
範例 #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() 不支援小數。如果將小數位數設定為 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);
}
/*
* 使用以 N 為底的對數計算以 2 為底的對數。
* @note 需要上述函式。
* @author Thomas Oldbury。
* @license 公共領域。
*/
function bclog2($a, $iter = 10)
{
return bcdiv(bcln($a, $iter), bcln("2", $iter));
}
/*
* 使用以 N 為底的對數計算以 10 為底的對數。
* @note 需要上述函式。
* @author Thomas Oldbury。
* @license 公共領域。
*/
function bclog10($a, $iter = 10)
{
return bcdiv(bcln($a, $iter), bcln("10", $iter));
}
?>