sin() 和 cos() 等函数的简单逼近 | 您所在的位置:网站首页 › sin函数表达式 › sin() 和 cos() 等函数的简单逼近 |
Programming 课程布置的作业中要自己实现 sin(),cos(),exp() 等函数。这些函数都可以使用泰勒级数来逼近,如下图所示: sin() 函数的逼近由于用泰勒级数实现比较麻烦,需要迭代很多次。又在网上找到了一个简单又快速的实现方法。简单来说就是使用一元二次方程的公式,及一些已知点的值。如下所示: => => if(x>0) { } => else{ } 逼近的效果还不错,如下所示: 实现代码如下所示: float mysin(float x) { const float B = 1.2732395447; // 4/pi const float C = -0.4052847346; // -4/(pi^2) float y = 0; //always wrap input angle to -PI..PI if (x < -3.14159265) x += 6.28318531; else if (x > 3.14159265) x -= 6.28318531; if(x > 0) y = B*x + C*x*x; else y = B*x - C*x*x; return y; }cos() 函数的逼近有了 sin() 函数的实现,cos() 的实现就容易多了,毕竟两者之间是有转换公式的: 实现代码如下: float mycos(float x) { const float Q = 1.5707963268; // pi/2 const float PI =3.1415926536; x += Q; if(x > PI) x -= 2 * PI; return( mysin(x)); }exp() 函数的逼近使用下面的泰勒级数,可以发现当 n = 256 时,逼近的效果会非常好。 逼近结果如下图所示: 实现代码如下: float myexp(float x) { x = 1.0 + x/256; x *= x; x *= x; x *= x; x *= x; x *= x; x *= x; x *= x; x *= x; return x; }参考[1]. [译]一种简单,快速,精准的sin/cos函数模拟,及as3实现 [2]. https://gist.github.com/geraldyeo/988116 [3]. exp()近似计算,exp快速算法,C语言实现exp |
CopyRight 2018-2019 实验室设备网 版权所有 |