基于泰勒展开式的高精三角函数实现

以sin()函数为例谈谈我的两种实现:泰勒公式是
sinx= x- x^3/3! + x^5/5! - x^7/7!+ x^9/9! .... =∑(-1)^n x^(2n+1)/(2n+1)!
第一种是在硬算的基础上简单优化:下面是流程码
               x2 = x*x                                                                     'x*x
               temp1 = x                                                                   'x
               n1=2
               n2=3
               jc=1
               sum=x
               fhbz = 0                                                                       '作为判断加减操作的标志
               Do
                    temp1 = x2*temp1                                                 'x^3,      x^5...这里借用了上一次的运算结果,避免重复运算
                    jc =jc*n1*n2                                                          '1*2*3,      4*5    这里借用了上一次的运算结果,避免重复运算
                    temp3 = temp1/ jc                                                  'x^3/3!,    x^(2n+1)/(2n+1)!
                    If fhbz = 0 Then
                        sum = sum- temp3                                             'x-x^3/3!
                       fhbz = 1
                    Else
                        sum = sum+temp3                                              'x + x^5/5!
                        fhbz = 0
                    End If
                    n1 = n1 + 2
                    n2 =  n2  + 2
                Loop Until n2 = jd Or n1 = jd
因为速度太慢,又改进了一下

化成 sinx=xxx2(456789x2(6789x2(89x2)))/9!   这个式子不标准,但是更好理解 ,速度在第一个方法的基础上提高了十倍,当泰勒级数较多时,可以近似理解为消去了除法,所以速度获得了较大提升

流程如下:
                X2 = x*x
                xjc = jd!
                n12 = 1
                n1=jd
                n2=jd-1
                xx = X2
                For i = jd To 5 Step -2                                                 'jd是精度控制参数
                    n12 = n1* n2*n12
                    n1 = n1 - 2
                    n2 = n2 - 2
                    xx = n12-xx
                    xx = X2* xx
                Next
                xx = x * xx
                xx = xx / xjc
                sum = x - xx
第二种方法用的高精加,减,乘(万进制硬乘配千进制FFT乘),除(估商配迭代除法)是我自已写的,万位精度sinx在32位机上用时100秒左右,
网上有个(BTCAL疯狂计算器v2.5,里面很多运算非常强大)万位精度sinx在我的电脑上用时22秒,不过它的高精乘法速度是我的乘法的十倍,也就是说它的三角函数算法速度可能和我的差不多。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值