C++中三角计算的精度与舍入
计算旋转矩形边界框的左上角,例如,我试图根据旋转角度采取不同的行动,以确定象限0..90°..180°..270°..360°,以度为单位。 将角度转换为弧度,以便与PI进行比较:C++中三角计算的精度与舍入,c++,precision,trigonometry,degrees,C++,Precision,Trigonometry,Degrees,计算旋转矩形边界框的左上角,例如,我试图根据旋转角度采取不同的行动,以确定象限0..90°..180°..270°..360°,以度为单位。 将角度转换为弧度,以便与PI进行比较: // http://codepad.org/zCxKJy30 #include <iostream> #include "math.h" using namespace std; int main() { float deg = 90.0; float rad = deg / 360
// http://codepad.org/zCxKJy30
#include <iostream>
#include "math.h"
using namespace std;
int main()
{
float deg = 90.0;
float rad = deg / 360.0 * 2.0 * M_PI;
if( rad <= M_PI/2.0)
{
cout << "less or equal";
}
else
{
cout << "larger";
}
return 0;
}
我希望这个条件是正确的,但事实并非如此
我想知道是否有一个简单的解决方案,不像和建议
我刚刚尝试使用双精度类型,然后比较工作如预期:
为什么提高精度会导致正确的评估?可能是重复的?我不会用一个10英尺长的杆子来处理数学问题,但我强烈怀疑你没有意识到浮点类型实际上有多有限……你使用的是双精度常数和算术,但四舍五入到单精度。使用双精度遍历似乎给出正确的结果:请考虑,既不是数学.h也不是MyPI是标准C++。它的值是在度,为什么你不能把它与90度比较?是的,正如前面提到的,由于计算过程中的舍入,现在强烈建议不要使用浮动。使用双精度或定点计算。是的,请记住,任何浮点值实际上都不能进行严格的比较,任何特定的浮点值实际上意味着它到达某个间隔,但不等于某个值。