我需要C++中的模

I need modulo in C++

本文关键字:C++      更新时间:2023-10-16

我有一个实数x,我想得到数字(x mod 2*PI)=y,其中y在0和2*PI之间。

我可以用一个循环来做,如果x是负数,我就一直加2*pi,直到我的数字在[0,2*pi]的范围内,或者如果x大于2*pi,我就可以一直减去。然而,我希望有一种更优雅的方式来做到这一点。

我试过这个:

fmod(-0.3434073,2*M_PI);

但这仍然是-0.3434073。为什么以及如何让它按我的意愿工作?

编辑:Notinlist的回答速度更快。

在C99标准中,第7.12.10.1节规定:

对于某个整数n,fmod函数返回值x−ny,这样,如果y为非零,则结果与x具有相同的符号,并且幅度小于y的幅度。如果y为零,则发生域错误还是fmod函数归零是由实现定义的

根据这个,如果你想要正确的符号,你需要添加y

总而言之:

double fmod_positive(double x, double y){
    double tmp = fmod(x, y);
    return x < 0 ? tmp + y : tmp;
}
相关文章:
  • 没有找到相关文章