Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C:我能让模运算符处理非整数值吗?_C_Operator Keyword_Modulo - Fatal编程技术网

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
的变量的值达到或超过2
PI
时,我需要将其值重置回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
做什么?弧度函数处理的值超过
。我没有意识到这一点。谢谢。谢谢!我会记住这种方法。请以后的读者注意,如果
inc
可能大于
2*PI
,此代码需要修改,因为您可能需要在每次迭代中减去
2*PI
不止一次。如果您只增加6*PI一次?这是一个幼稚的“mod”这种方法需要一些工作来确保它将小于您想要的值。@Shark之所以这样做,是因为
inc
小于
2*PI
,否则我会建议其他方法。是的,一般来说,这只适用于OP的情况,但@NateEldredge也提到过-如果它超过由于问题的标题是“它是怎样的”,未来的读者也会偶然发现它,他们可能不会在[0,2*PI]范围内使用它:)