将负角度转换为正角度:涉及无效操作数的使用
Convert negative angle to positive: Involves invalid operand use
我正在尝试将负角度(以度为单位)转换为正角度。但我得到一个编译错误说:
我代码: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);
}
相关文章:
- 错误:类型"double()"和"double()"的操作数无效到二进制&quo
- 二进制表达式的操作数无效 - 使用 for 和迭代器
- int* 和 int[] 类型对二进制运算符 + 的操作数无效
- 错误:二进制'operator*' 'float'和'float[0]'类型的操作数无效
- c++ 错误:二进制"运算符+"类型"矩阵*"和"矩阵*"的操作数无效
- 二进制表达式的操作数无效?
- 二进制表达式的操作数无效("常量字符*"和"常量字符*")
- 没有变量声明为函数,但错误:二进制表达式的操作数无效
- 为什么映射迭代器显示基本操作数无效错误
- 如何修复此错误:二进制表达式的操作数无效("std::vector<double>"和"double")?
- 错误:二进制表达式的操作数无效(映射使用查找函数错误)
- C++:"错误:类型'const char*'和'const char [28]'的操作数无效到二进制'ope
- 错误:使用索引寻址和 Clang 的指令的操作数无效
- 错误:二进制'operator*' 'int [1]'和'float'类型的操作数无效
- 派生类的重载<<运算符表示操作数无效
- 错误:C++ 中二进制"operator%"类型"float"和"int"的操作数无效
- 实现 vector 时二进制表达式的操作数无效
- 提升multi_index示例:错误:二进制表达式的操作数无效
- 字符和常量字符[2] 类型的操作数无效到二进制运算符
- 二进制表达式的操作数无效("无线电设备"和"常量无线电设备")