角度到弧度不准确

时间:2018-04-21 21:52:12

标签: c++ math geometry

我自己编写了一个将角度转换为弧度的小函数:

double toRadians(const double &angle){
    double radianangle = (double)(angle * M_PI) / 180;
    return radianangle;
}

使用它可以正常工作,但我发现一个问题。快速测试表明这不完全准确,这就是我所做的:

const double angle = 90;
double delta = toRadians(angle);
cout << "delta: " << delta << endl;
cout << "cosinus: " << cos(delta) << endl;
cout << "sinus: " << sin(delta) << endl;

这给了我输出:

delta: 1.5708
cosinus: 6.12323e-17
sinus: 1

虽然在这种情况下正确给出了正弦值,但显然出现了问题,因为cos(Pi/2)应该只是0.不准确是搞砸了我的整个图形引擎,所以我想找到摆脱这种方法的方法。

1 个答案:

答案 0 :(得分:3)

使用浮点数时,始终使用容差。

而不是if (someDouble == 0.0)你做if (fabs(someDouble) < EPSILON)

而不是if (someDouble == someOtherDouble)你做if (fabs(someDouble-someOtherDouble) < EPSILON)

EPSILON应该足够小以获得良好的准确性,并且足够大以解决浮点不精确性,例如constexpr const double EPSILON = 0.0001;

请参阅:Why Are Floating Point Numbers Inaccurate?