5

我正在尝试将负角(以度为单位)转换为正角。但我得到一个编译错误说:

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

4 回答 4

14

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

double to_positive_angle(double angle)
{
   angle = fmod(angle, 360);
   if (angle < 0) angle += 360;
   return angle;
}
于 2013-05-17T04:02:50.100 回答
5

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

return fmod( 3600000.0 + angle, 360.0 );

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

于 2013-05-17T01:45:28.223 回答
5

好吧,也许我有点慢,但我不确定你为什么使用 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;
}
于 2013-05-17T01:54:42.590 回答
0

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

void get_positve_angle(double theta)
{
    return fmod(fmod(theta,360)+360,360);
}
于 2021-05-31T12:45:43.423 回答