PHP8 のリリースに伴い、新しい関数 fdiv() も開発者の前に登場しました。コードを簡素化し、精度と効率を向上させることができます。この記事では、fdiv() のさまざまな使用テクニックを検討します。
1. 精度の向上:
PHP7 では、関数 bcdiv() を使用して高精度の計算を実現できます。しかし、PHP8 では、新しい fdiv() 関数により、より効率的で使いやすいメソッドが提供されます。この関数は浮動小数点数を処理し、正確な結果を返すことができます。これにより、浮動小数点の精度の問題によって引き起こされる計算エラーを回避できます。これは、10 進数や通貨の計算を含む一部のシナリオでは特に重要です。
たとえば、以前のバージョンでは、0.1 に 0.2 を加えた値を計算したい場合、通常のアプローチは次のとおりでした:
$sum = 0.1 + 0.2; echo $sum; // 输出结果为 0.30000000000000004
この結果は明らかに期待したものではありませんが、PHP8 ではfdiv() 関数を使用すると、より正確な結果を取得できます:
$sum = fdiv(0.1, 1) + fdiv(0.2, 1); echo $sum; // 输出结果为 0.3
0.1 と 0.2 を分数形式に変換する必要があることに注意してください。これらは、1 で割ることによって取得できます。このようにして、浮動小数点数ではなく分数を計算していることが保証され、浮動小数点の精度によって引き起こされるエラーが回避されます。
2. 高速化:
fdiv() は計算精度の向上に加えて、計算速度も向上します。以前は、PHP7 の bcdiv() 関数を使用して高精度の計算を実現するには多くのリソースと時間が必要でしたが、fdiv() 関数を使用してこの作業をより簡単に完了できるようになりました。以下は、2 つのメソッドの時間とメモリ使用量を比較したテスト結果です:
// 使用 fdiv() 函数 $start = microtime(true); $sum = 0; for ($i = 1; $i <= 1000000; $i++) { $sum = fdiv($sum, 1) + fdiv(0.0000001, 1); } echo 'fdiv() 函数耗时:' . (microtime(true) - $start), ' 秒,内存使用:' . memory_get_usage(true) . ' bytes' . PHP_EOL; // 使用 bcdiv() 函数 $start = microtime(true); $sum = 0; for ($i = 1; $i <= 1000000; $i++) { $sum = bcadd($sum, '0.0000001', 10); } echo 'bcdiv() 函数耗时:' . (microtime(true) - $start), ' 秒,内存使用:' . memory_get_usage(true) . ' bytes' . PHP_EOL;
出力結果は次のとおりです:
fdiv() 函数耗时:0.41537404060364 秒,内存使用:262144 bytes bcdiv() 函数耗时:4.497987985611 sec,内存使用:134217728 bytes
fdiv() 関数を使用すると、計算が速度ははるかに速く、メモリ使用量も少ないため、タスクをより速く完了できます。
3. 効率的な計算:
fdiv() 関数は、精度と計算速度を向上させるだけでなく、効率的な計算にも使用できます。 PHP8 では、配列内のすべての要素に対して同時に除算計算を実行できます。次の例では、fdiv() 関数を使用して、配列内のすべての要素を 2 で除算します。
$array = [10, 20, 30, 40, 50]; $res = array_map(fn($v) => fdiv($v, 2), $array); print_r($res); // 输出结果为 [5,10,15,20,25]
array_map() 関数を使用すると、ループを使用せずに配列内の各要素を分割できます。計算。
要約すると、 fdiv() 関数は PHP プログラミングの効率と計算精度を向上させることができます。より多くのプログラマーがこの関数を使い始めると、これが PHP プログラミングの標準ライブラリになると考えられます。
以上がPHP8 の新機能: fdiv() のさまざまな使用テクニックの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。