BCPOWは、高精度指数操作のためにBCMATH拡張によって提供される関数です。構文は次のとおりです。
string bcpow ( string $base , string $exponent [, int $scale = 0 ] )
$ベース:基本番号、文字列形式で表されます。
$ exponent :指数の整数、文字列形式。
$スケール:結果の小数点以下の場所の数、デフォルトは0です。
BCPOWは、浮動小数点操作の精度損失を回避でき、特に多数および高精度の要件に適しています。
科学表記法は通常、 A×10^Bのようなもので、指数Bが非常に大きくなる可能性があり、浮動小数点数で直接計算すると、オーバーフローまたは不正確になります。 BCPOWを使用して、 10^bを正確に計算し、 Aによる高精度の乗算を実行することができ、それにより科学表記法の正確な計算を実現できます。
計算する必要があるとします:
3.14159 × 10^20
BCPOWを使用して、これを書くことができます。
<?php
$mantissa = '3.14159'; // 係数
$exponent = '20'; // 索引
// 計算します 10 の 20 力に
$power = bcpow('10', $exponent, 0);
// 乘以係数,予約する 5 位小数
$result = bcmul($mantissa, $power, 5);
echo $result; // 出力結果
?>
ここでは、最初にBCPOWを使用して10^20を計算し、多数を取得し、次にBCMULに係数を掛けて高精度を確保します。
繰り返し使用する便利さのために、それは関数にカプセル化することができます:
<?php
function sciNotationCalc(string $mantissa, string $exponent, int $scale = 10): string {
// 計算します10の索引力に
$power = bcpow('10', $exponent, 0);
// 計算します最终结果
return bcmul($mantissa, $power, $scale);
}
// 使用の例
echo sciNotationCalc('6.02214076', '23', 8); // 6.02214076e+23 の高精度計算します
?>
bcpowでは、指数$ exponentは、小数または負の数ではなく整数でなければなりません。
指数が負の数である場合、 BCDIVを使用して実装する必要があります。たとえば、 3.14×10^-5の計算では、以下を使用できます。
<?php
$mantissa = '3.14';
$exponent = '-5';
// 計算します10の5力に
$power = bcpow('10', '5', 0);
// 計算します 3.14 / 10^5
$result = bcdiv($mantissa, $power, 10);
echo $result;
?>
スケールパラメーターは、小数点後の精度を決定し、要件に従って調整します。
上記の方法により、PHPプログラマーは、金融計算、科学的計算、その他のシナリオに適した浮動小数点数に依存することなく、高精度の科学表記操作を実現できます。
PHPの高精度の数学的関数について詳しく知りたい場合は、以下にアクセスできます。
<?php
// 公式ドキュメントの例のアドレスを参照してください
$url = 'https://m66.net/manual/en/book.bc.php';
echo "PHP BCMath 公式文書:" . $url;
?>