C# 除算が乗算より遅いのはなぜですか?

プログラミング言語、特に C# では、加算、減算、乗算、除算の 4 つの算術演算を実行できます。

外部から見ると、パフォーマンスの点ではすべてが同じように見えるかもしれませんが、そのうちの 1 つは他の 3 つと比べてはるかに遅いことがわかります。

どちらが遅いですか? 部門。

この HP 論文 によると:

浮動小数点の除算と平方根は、加算や乗算よりも計算にかなり時間がかかります。後者の 2 つは直接計算されますが、前者は通常、反復アルゴリズムで計算されます。最も一般的なアプローチは、除算のないニュートン・ラフソン反復を使用して、分母の逆数 (除算) または平方根の逆数の近似を取得し、分子 (除算) または入力引数 (平方根) を乗算することです。 。

上記のステートメントを検証するために、以下のコードを使用して簡単なテストを実行することにしました。

        //Generate two random numbers
        var rand = new System.Random();
        float a = rand.Next();
        float b = rand.Next();

        Debug.Log("Number a: " + a + " Number b: " + b);

        System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();

        watch.Start();
        //Addition
        for (int i = 1; i < 1000000; i++)
        {
            float tmp = a + b;
        }
        watch.Stop();
        //Output
        Debug.Log("Addition took: " + watch.Elapsed.TotalSeconds.ToString("0.0000") + " seconds");

        watch.Reset();
        watch.Start();
        //Subtraction
        for (int i = 1; i < 1000000; i++)
        {
            float tmp = a - b;
        }
        watch.Stop();
        //Output
        Debug.Log("Subtraction took: " + watch.Elapsed.TotalSeconds.ToString("0.0000") + " seconds");

        watch.Reset();
        watch.Start();
        //Multiplication
        for (int i = 1; i < 1000000; i++)
        {
            float tmp = a * b;
        }
        watch.Stop();
        //Output
        Debug.Log("Multiplication took: " + watch.Elapsed.TotalSeconds.ToString("0.0000") + " seconds");

        watch.Reset();
        watch.Start();
        //Division
        for (int i = 1; i < 1000000; i++)
        {
            float tmp = a / b;
        }
        watch.Stop();
        //Division
        Debug.Log("Division took: " + watch.Elapsed.TotalSeconds.ToString("0.0000") + " seconds");

基本的に、2 つの乱数に対して 100 万回の加算、減算、乗算、除算を実行し、それぞれの処理にかかる時間を測定しました。テストは 5 回繰り返され、結果は次のとおりです。

  • 加算には平均 0.0004 秒かかりました
  • 減算には平均して 0.0003 秒かかりました
  • 乗算には平均 0.0003 秒かかりました
  • 除算には平均 0.0044 秒かかりました

その結果、加算、減算、乗算はパフォーマンスの点では同様ですが、除算は約 1100% 遅いことがわかりました。

小さな違いではないため、可能な場合は常に除算ではなく乗算を使用する方が良いという結論につながります。たとえば、数値を 2 で割る必要がある場合は、代わりに 0.5 を掛けるのが最適です。

おすすめの記事
C# で平方根演算が遅いのはなぜですか?
C# をより早く学習するための 7 つの効果的なヒント
C# の主要な関数を調べる
C# でマルチスレッド コードのデータを作成および取得するためのガイド
C# プログラミングの基礎をマスターする
AI による C# コード生成の自動化
C# のさまざまなコーディング方法