问题
当浮点数很大时,作为三角函数的入参,计算出来的结果会让人大跌眼镜!
X64 Windows平台MSVC2017编译器计算的sin(110000),上面那个数值明显是不对的
分析
查看sinf
函数原型,是通过查表法来实现的,也就说芯片内部不可能维护一个巨大的表格,入参很大会有误差
1 | //! \brief Single-Precision Floating-Point Sine (radians) |
解决
需要将角度值限制在±2π范围内(理论上说这个范围内的精度是最好的)
1 | // 将角度归一化到[-2π, 2π]范围内 |
调试看归一化后的函数值
总结
我们学过高等数学,了解到可以通过泰勒级数
逼近的方式来计算三角函数
的值,就是不停地计算多项式的值
但是在嵌入式平台一般倾向于使用查表法(空间换时间)来计算
x | sin(x) |
---|---|
1 | 0.841471 |
2 | 0.909297 |
3 | 0.141120 |
4 | -0.756802 |