我自己编写了一个将角度转换为弧度的小函数:
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.不准确是搞砸了我的整个图形引擎,所以我想找到摆脱这种方法的方法。
答案 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;
。