将负角度转换为正数:涉及无效操作数使用

时间:2013-05-17 01:41:13

标签: c++ c math

我试图将负角度(以度为单位)转换为正角度。但我收到编译错误说:

  

test.cpp类型为'double'且'int'为二进制'operator%'的无效操作数   test.cpp类型为'float'的操作数无效,而'int'为二进制'operator%'

的操作数无效

我的代码:

double to_positive_angle(double angle)
{
   return ((3600000 + angle) % 360);
}

float to_positive_angle(float angle)
{
   return ((3600000 + angle) % 360);
}

很明显,因为我试图在Float和Double上使用Modulus运算符。

我能否成功地将负角度(浮动)转换为正角度(浮动)?或者我可以克服模数编译错误的方法?

4 个答案:

答案 0 :(得分:10)

此版本适用于所有可能的输入,而不仅仅是大于3600000的输入,并解决了您遇到的%问题。

double to_positive_angle(double angle)
{
   angle = fmod(angle, 360);
   if (angle < 0) angle += 360;
   return angle;
}

答案 1 :(得分:5)

您不能在浮点类型上使用模运算符。您应该使用fmod

return fmod( 3600000.0 + angle, 360.0 );

请注意上述操作中可能引入的舍入和精度错误。

答案 2 :(得分:4)

好吧也许我有点慢,但我不确定你为什么要使用3600000.0常数。

如果您只想将负角度转换为正值,则只需添加360.0直到获得正数。

double to_positive_angle(double angle)
{
   angle = fmod(angle, 360);
   while(angle < 0) { //pretty sure this comparison is valid for doubles and floats
     angle += 360.0;
   }

   return angle;
}

答案 3 :(得分:0)

我认为这是最聪明的方法:

void get_positve_angle(double theta)
{
    return fmod(fmod(theta,360)+360,360);
}