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

Convert negative angle to positive: Involves invalid operand use

本文关键字:操作数 无效 转换      更新时间:2023-10-16

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

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上使用模数运算符。

是否有任何方法可以成功地将负角度(float)转换为正角度(float)?或者我可以克服模数编译错误的方法?

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

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

好吧,也许我有点慢,但我不确定为什么要使用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;
}

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

return fmod( 3600000.0 + angle, 360.0 );

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

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

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