0

这就是我为检查一个数字能否被 2*M_PI 整除所做的工作。“w”是 2/3 的常数,t 是随 t += dt 变化的变量,其中 dt 为 0.1。我正在尝试使用 mod 运算符 % 来查看某些内容是否可整除。但它不起作用。

布尔整除;实际 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它,它对双精度数而不是积分运算符进行%运算。

于 2011-05-30T09:59:32.257 回答
2

'%' 是整数模运算符,不适用于浮点/双参数/操作数

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 回答