针对高精对数,我目前已采用了容易编程和高效的方法。就是开方分解Ln(x)中的X(早先调试开方程序时就发现,大于零的数进行开方运算,当开方次数无限增加时,开方值无限接近1),当然开方不是乱用的,必需有理论或已有公式的支持,这个公式就是:,其实这个算法本身并不会使对数运算获得本质的提升,提速的根本是开平方有快速算法,这个和傅里叶变换对乘法的加速是一个原理,傅里叶变换本身也不会使乘法变快,提速的根本是傅里叶变换有了快速算法FFT。我的方法如下: For i = 1 To 240 '针对一万精度大约进行240次分解 x = myKpf(x) ‘开平方 Next 对y进行泰勒级数运算(没能象sinx一样找到简化算法,现只能老老实实硬算),针对一万精度采用(精度除以70)次泰勒级数运算。 采用的公式是这个: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秒左右.欢迎交流