弧度不准确的角度

问题描述 投票:0回答:1

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

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.不准确是搞砸了我的整个图形引擎,所以我想找到一种摆脱的方法这个的。

c++ math geometry
1个回答
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?

© www.soinside.com 2019 - 2024. All rights reserved.