0

これは、数値が 2*M_PI で割り切れるかどうかを確認するために行ったことです。"w" は 2/3 の定数で、t は t += dt によって変化する変数です。ここで、dt は 0.1 です。何かが割り切れるかどうかを確認するために、mod 演算子 % を使用しようとしています。しかし、うまくいきません。

bool 割り切れます。実際の w = 2/3; 実数;

if((w*t) % 2*M_PI == 0)
    {
        divisible = true;
    }

else
    {
        divisible = false;
    }

これは、「型 'real' および 'int' からバイナリ 'operator%' へのオペランドが無効です」というエラーです。

これは何を意味するのでしょうか?これを機能させるにはどうすればよいですか?では、w と t を int にする必要がありますか? w は 2/3 であり、t は 0 から 0.1 ずつ増加するため、そうではありません。誰か助けてくれませんか?

4

3 に答える 3

3

代わりに使用してください。整数演算子std::fmodではなく double で動作します。%

于 2011-05-30T09:59:32.257 に答える
2

'%' は float/double 引数/オペランドに対して機能しない整数モジュロ演算子です

役立つかもしれない math.h に float/double modf 関数が存在します。

于 2011-05-30T10:06:00.870 に答える
2

浮動小数点数が別の数で正確に割り切れるかどうかを知りたいのはなぜですか?

浮動小数点演算は、「正確な」計算には使用しないでください。すべての操作の結果は厳密に定義されていますが、同じ操作の数学的意味とは異なります。特に:

double a = 1e20;
double b = 1e-20;

double c = (a + b) - a;

cこれは と等しいと思うかもしれませんbが、実際にはそうではありません!

浮動小数点数を特定のウィンドウとのみ比較する必要があります。手段 - 特定の浮動小数点値が有限長の範囲内にあるかどうか。

于 2011-05-30T10:08:41.363 に答える