高精度对数函数的实现

针对高精对数,我目前已采用了容易编程和高效的方法。就是开方分解Ln(x)中的X(早先调试开方程序时就发现,大于零的数进行开方运算,当开方次数无限增加时,开方值无限接近1),当然开方不是乱用的,必需有理论或已有公式的支持,这个公式就是:其实这个算法本身并不会使对数运算获得本质的提升,提速的根本是开平方有快速算法

这个和傅里叶变换对乘法的加速是一个原理,傅里叶变换本身也不会使乘法变快,提速的根本是傅里叶变换有了快速算法FFT。

我的方法如下:

        
        For i = 1 To 240                                '针对一万精度大约进行240次分解
                   x = myKpf(x)                         ‘开平方
        Next
        把x代入泰勒级数进行运算

        采用的公式是这个:ln(1+x)=x-x^2/2+x^3/3-……+(-1)^(k-1)*(x^k)/k(|x|,下面括号内的是泰勒级数运算VB6.0源代码,因为较复杂,不好用P码表达,

 

       (   string1.Zx(1) = 0                                         ‘除掉ln(1+x)中的1,保留x
                jdtemp = jd                                              'jd 是需要控制的精度
                Dim N As StrToZx
                ReDim N.Zx(-1 To 4) As Long
                N.JzBz = 9
                N.strlen = 2
                N.XsdWz = 9
                N.ZhFhBz = True
                N.Zx(1) = jdtemp \ 70
                N.eE = 0
                Dim sum As StrToZx
                Dim temp As StrToZx
                Dim tempY As StrToZx
                tempX = string1
                tempY = string1            
                For i = N.Zx(1) To 1 Step -1
                    temp = myEXCEPT(g1, N)
                    temp = myMINUS(temp, tempX)
                    tempX = myMULTIPLY(temp, tempY)
                    N.Zx(1) = N.Zx(1) - 1
                Next
                tempY = g1
                tempY.Zx(1) = 240           )

        y = y*(2^240)
   
        myLn = x             '返回值

 

     经测试万位精度Ln(9)用时6秒左右,BTCAL疯狂计算器v2.6用时32.7秒左右.

 

欢迎交流

  • 电子邮箱:wtbzhy@126.comQQ号码:760701933微信号:wx760701933

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值