モジュラスは間違った結果をもたらしますか?

マドメニョ

これらの2つのモジュラス計算が2つの異なる結果をもたらす理由を誰かに教えてもらえますか?私は誰かか何かのせいにする必要がありますが、私はこのバグを見つけるのを失いました。

public void test1()
{
    int stepAmount = 100;
    float t = 0.02f;
    float remainder = t % (1f / stepAmount);
    Debug.Log("Remainder: " + remainder);
    // Remainder: 0.01

    float fractions = 1f / stepAmount;
    remainder = t % fractions;
    Debug.Log("Remainder: " + remainder);
    // Remainder: 0
}

VS-2017V15.3.5の使用

私の最善の策は、これは、ランタイムが関連する型よりも高い精度で浮動小数点演算を実行し、割り当て時に結果を型の精度に切り捨てる自由によるものです。

セクション12.1.3のCLI仕様では、格納場所で使用する場合の浮動小数点数、floatおよびdoubleの正確な精度が規定されています。ただし、実行スタック、引数の戻り値などの他の場所で浮動小数点数が使用されている場合は、精度を超えることができます。使用される精度は、ランタイムと基盤となるハードウェアに任されています。この余分な精度により、異なるマシンまたはランタイム間で浮動小数点評価に微妙な違いが生じる可能性があります。

ソースはこちら

最初の例でt % (1f / stepAmount)は、より高い精度で完全に実行しfloat、結果がに割り当てられるときに切り捨てることができますremainderが、2番目の例で1f / stepAmountfractions、モジュラス演算の前に切り捨てられてに割り当てられます。

stepamountaconst作成すると両方のモジュラス演算が一貫する理由については、コンパイル時に1f / stepamount評価されて浮動小数点精度に切り捨てられる定数式すぐになり、本質的に両方の例を同等にする書き込みと同じであるためです。0.01f

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

GROUP BYMONTHは間違った結果をもたらします

分類Dev

Timedelta操作は間違った結果をもたらします

分類Dev

Round(0.005)は間違った結果をもたらしますか?

分類Dev

Eigen LLTモジュールが間違った結果を出しますか?

分類Dev

Eigenでのスパース行列の乗算は、間違った結果をもたらしますか?

分類Dev

OpenMPの崩壊は間違った結果をもたらします

分類Dev

Timedeltaとの時差は間違った結果をもたらします

分類Dev

Pythonのreplace関数は間違った結果をもたらします

分類Dev

正規表現は間違った結果をもたらします

分類Dev

iter_swapは間違った結果をもたらします

分類Dev

Google SheetsVALUE関数は間違った結果をもたらします

分類Dev

AES復号化は間違った結果をもたらします

分類Dev

ソート配列は間違った結果をもたらします

分類Dev

Pythonの「decimal」パッケージは間違った結果をもたらします

分類Dev

scipyスパース行列のsklearntrain_test_splitは間違った結果をもたらします

分類Dev

イングレス乗算は間違った結果をもたらします

分類Dev

パンダを使ったアイテムの再割り当ては間違った結果をもたらします

分類Dev

SQL結合テーブルは間違った結果をもたらします

分類Dev

File.isFileは()間違った結果を返しますか?

分類Dev

削減のためのOpenMP並列は間違った結果をもたらします

分類Dev

行を減算するパンダは間違った結果をもたらします

分類Dev

「最適な交点を見つける」実装は間違った結果をもたらします

分類Dev

モジュロ演算子(%)は異なる結果をもたらします

分類Dev

ソートアルゴリズムは間違った結果をもたらします

分類Dev

Apache Commons Math:三重対角行列の固有分解は間違った結果をもたらします

分類Dev

固有の化合物の加算は間違った結果をもたらします

分類Dev

私のクイックソートの実装は間違った結果をもたらします

分類Dev

週と平日で定義された2つのモーメントのMoment.js差分は、間違った結果をもたらします

分類Dev

OpenGL:シェーダーに実装されたBlinn-Phongモデルは間違った結果をもたらします

Related 関連記事

  1. 1

    GROUP BYMONTHは間違った結果をもたらします

  2. 2

    Timedelta操作は間違った結果をもたらします

  3. 3

    Round(0.005)は間違った結果をもたらしますか?

  4. 4

    Eigen LLTモジュールが間違った結果を出しますか?

  5. 5

    Eigenでのスパース行列の乗算は、間違った結果をもたらしますか?

  6. 6

    OpenMPの崩壊は間違った結果をもたらします

  7. 7

    Timedeltaとの時差は間違った結果をもたらします

  8. 8

    Pythonのreplace関数は間違った結果をもたらします

  9. 9

    正規表現は間違った結果をもたらします

  10. 10

    iter_swapは間違った結果をもたらします

  11. 11

    Google SheetsVALUE関数は間違った結果をもたらします

  12. 12

    AES復号化は間違った結果をもたらします

  13. 13

    ソート配列は間違った結果をもたらします

  14. 14

    Pythonの「decimal」パッケージは間違った結果をもたらします

  15. 15

    scipyスパース行列のsklearntrain_test_splitは間違った結果をもたらします

  16. 16

    イングレス乗算は間違った結果をもたらします

  17. 17

    パンダを使ったアイテムの再割り当ては間違った結果をもたらします

  18. 18

    SQL結合テーブルは間違った結果をもたらします

  19. 19

    File.isFileは()間違った結果を返しますか?

  20. 20

    削減のためのOpenMP並列は間違った結果をもたらします

  21. 21

    行を減算するパンダは間違った結果をもたらします

  22. 22

    「最適な交点を見つける」実装は間違った結果をもたらします

  23. 23

    モジュロ演算子(%)は異なる結果をもたらします

  24. 24

    ソートアルゴリズムは間違った結果をもたらします

  25. 25

    Apache Commons Math:三重対角行列の固有分解は間違った結果をもたらします

  26. 26

    固有の化合物の加算は間違った結果をもたらします

  27. 27

    私のクイックソートの実装は間違った結果をもたらします

  28. 28

    週と平日で定義された2つのモーメントのMoment.js差分は、間違った結果をもたらします

  29. 29

    OpenGL:シェーダーに実装されたBlinn-Phongモデルは間違った結果をもたらします

ホットタグ

アーカイブ