C:无论如何我可以让模运算符处理非整数值吗?

C: is there anyway i can get the modulo operator to work on non integer values?

每当变量的值达到或超过 2 PI 时,我需要将名为 theta 的变量的值重置回 0。我在想一些事情:

int n = 10;
float inc = 2*PI/n;
for(int i=0;i<10;i++)
    theta = (theta + inc) % 2*PI;

当然它不会起作用,因为 % 在 C 中对浮点不起作用。是否有另一种等效或更好的方法来实现我在这里尝试做的事情?欢迎所有回复。谢谢

由于除法实际上只是重复减法,您可以通过检查该值是否至少为 2*PI 来获得余数,如果是,则减去该值。

int n = 10;
float inc = 2*PI/n;
for(int i=0;i<10;i++) {
    theta += inc;
    if (theta >= 2*PI)  theta -= 2*PI;
}

请注意,因为增量的数量小于 2*PI 限制,我们可以只进行一次“超过”检查。这可能比调用 fmod 时涉及的操作成本更低。如果更多,您至少需要 while 代替,或者只使用 fmod.

使用标准 fmod 函数。请参阅 C17 标准中的 https://en.cppreference.com/w/c/numeric/math/fmod 或 7.2.10。

The fmod functions return the value x − n y , for some integer n such that, if y is nonzero, the result has the same sign as x and magnitude less than the magnitude of y.

所以 theta = fmod(theta, 2*PI) 应该是你想要的,如果我理解你的问题的话。

如果确实必须在 float 而不是 double 上完成,您可以使用 fmodf 代替。