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
代替。
每当变量的值达到或超过 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
代替。