C:我能让模运算符处理非整数值吗?
每当一个名为C:我能让模运算符处理非整数值吗?,c,operator-keyword,modulo,C,Operator Keyword,Modulo,每当一个名为theta的变量的值达到或超过2PI时,我需要将其值重置回0。我的想法大致如下: int n = 10; float inc = 2*PI/n; for(int i=0;i<10;i++) theta = (theta + inc) % 2*PI; int n=10; 浮点数inc=2*PI/n; 对于(int i=0;i,因为除法实际上只是重复的减法,所以可以通过检查值是否至少为2*PI,然后减去该值来获得余数 int n = 10; float inc = 2*P
theta
的变量的值达到或超过2PI
时,我需要将其值重置回0。我的想法大致如下:
int n = 10;
float inc = 2*PI/n;
for(int i=0;i<10;i++)
theta = (theta + inc) % 2*PI;
int n=10;
浮点数inc=2*PI/n;
对于(int i=0;i,因为除法实际上只是重复的减法,所以可以通过检查值是否至少为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;
}
int n=10;
浮点数inc=2*PI/n;
对于(inti=0;i=2*PI)θ-=2*PI;
}
请注意,由于增量的数量小于2*PI
限制,因此我们可以执行“超过”只检查一次。这可能比调用fmod
时所涉及的操作更便宜。如果更多,您至少需要而,或者只使用fmod
使用标准fmod
函数。请参阅C17标准中的或7.2.10
fmod函数返回值x− 对于某个整数n,如果y非零,结果
具有与x相同的符号,且幅值小于y的幅值
所以,如果我正确理解了你的问题,那么θ=fmod(θ,2*PI)
应该是你想要的
如果必须在float
而不是double
上执行,您可以使用fmodf
来代替。您使用theta
做什么?弧度函数处理的值超过2π
。我没有意识到这一点。谢谢。谢谢!我会记住这种方法。请以后的读者注意,如果inc
可能大于2*PI
,此代码需要修改,因为您可能需要在每次迭代中减去2*PI
不止一次。如果您只增加6*PI一次?这是一个幼稚的“mod”这种方法需要一些工作来确保它将小于您想要的值。@Shark之所以这样做,是因为inc
小于2*PI
,否则我会建议其他方法。是的,一般来说,这只适用于OP的情况,但@NateEldredge也提到过-如果它超过由于问题的标题是“它是怎样的”,未来的读者也会偶然发现它,他们可能不会在[0,2*PI]范围内使用它:)