SQRT()は、数の平方根を返すPHPに組み込まれた機能です。構文は次のとおりです。
sqrt(float $num): float
例えば:
echo sqrt(2); // 出力 1.4142135623731
この関数は、システムの基礎となる二重精度の浮動小数点数(二重)に基づいて、浮動小数点数を返します。
BCSQRT()は、BC MATH拡張によって提供される関数であり、正方形の根を高精度で計算します。構文は次のとおりです。
bcsqrt(string $operand, int $scale = 0): string
例えば:
echo bcsqrt('2', 50);
// 出力 1.4142135623730950488016887242096980785696718753769480732
sqrt()とは異なり、 bcsqrt()は文字列型値を返します。これは、結果の小数点以下の場所(スケールパラメーター)の数を指定できます。
SQRT()で使用される浮動小数点数は、精度の点で自然な制限があります。 PHPの浮動小数点精度は一般に約14ビットで、ほとんどの毎日のアプリケーションシナリオに適しています。ただし、金融、科学的コンピューティング、または暗号化アルゴリズムを含むシナリオでは、精度が限られているため、結果が不正確になります。
BCSQRT()は、文字列に基づいた高精度の数学的操作であり、精度は開発者によって完全に制御されます。たとえば、100桁の平方根を簡単に計算できます。これは、正確な計算を必要とするプログラムにとって重要です。
比較例:
$num = '2';
echo 'sqrt: ' . sqrt((float)$num) . PHP_EOL;
echo 'bcsqrt: ' . bcsqrt($num, 100) . PHP_EOL;
出力は次のとおりです。
sqrt: 1.4142135623731
bcsqrt: 1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327641573
BCSQRT()によって提供される結果は、SQRT()よりもはるかに正確であることがわかります。
高精度計算<br> 開発者が小数点の精度を自分で制御できるようにして、浮動ポイントエラーを避けます。
より高い安定性<br> 非常に少ないまたは非常に多くの場合、 bcsqrt()はより安定して動作し、オーバーフローや丸めのエラーを発生させずになります。
幅広いアプリケーション<br> 金融運営(利息計算、通貨交換など)や科学工学を含むアプリケーションでは特に重要です。
タイプ安全<br> 戻り値は文字列であり、元のデータの完全性と一貫性を維持し、浮動小数点の丸めエラーを回避することを助長します。
ユーザー預金の複雑な金利計算を必要とする暗号通貨アプリケーションがあるとします。このシナリオでは、精度エラーを許容することはできません。
$principal = '10000.00';
$rate = '0.05'; // 5%
$years = '3';
// 最終的な複利価値を計算します:FV = P * (1 + r)^n
$growth = bcpow(bcadd('1', $rate, 10), $years, 20);
$final = bcmul($principal, $growth, 20);
echo 'Final amount after 3 years: ' . $final;
上記のコードは、浮動小数点計算を完全に回避し、関心計算の精度を保証し、 https://gitbox.netの財務アプリケーションモジュールに適しています。