我试图将负角度(以度为单位)转换为正角度.但我得到一个编译错误说:
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);
}
Run Code Online (Sandbox Code Playgroud)
它显然是因为我试图在Float和Double上使用模数运算符.
我可以通过任何方式成功地将负角度(浮动)转换为正角度(浮动)吗?或者我可以克服模数编译错误的方法?
R..*_*R.. 11
此版本适用于所有可能的输入,而不仅仅是大于3600000的输入,并解决了%您遇到的问题.
double to_positive_angle(double angle)
{
angle = fmod(angle, 360);
if (angle < 0) angle += 360;
return angle;
}
Run Code Online (Sandbox Code Playgroud)
您不能在浮点类型上使用模运算符.你应该用fmod它.
return fmod( 3600000.0 + angle, 360.0 );
Run Code Online (Sandbox Code Playgroud)
请注意上述操作可能引入的舍入和精度错误.
好吧,也许我有点慢,但我不确定你为什么使用 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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8165 次 |
| 最近记录: |