ysr
发表于 2021-3-27 13:34
修改了一下代码仍然不对,算不准确,迭代51次的结果:52359877559829887307710723054658381403286156656251有50位,用时0.5390625秒。
ysr
发表于 2021-3-27 13:59
改来改去,还是我的旧程序准确可靠,这个是我的旧程序的结果:
50000000000000000000000000000000000000000000000000有50位,用时0.28125秒.
旧代码如下:
Private Function jszhxian(sa As String, sd As String) As String
Dim s1
s1 = 1 & String(Val(sd), "0")
s2 = mbc2(Trim(sa), Trim(sa), Val(sd))
fs1 = -1
s3 = 3
Do While MBJC(zhengchuqy(MCC1(Trim(s1), jcjs(Val(s3)))), 1) >= 0
s1 = mbc2(Trim(s1), Trim(s2), Val(sd))
s = mpc3(Trim(s), tjfh(zhengchuqy(MCC1(Trim(s1), jcjs(Val(s3)))), Val(fs1)))
s3 = Val(Val(s3) + 2)
fs1 = Val(-1) * Val(fs1)
Loop
jszhxian = mbc2(Trim(sa), mpc3(Val(1) & String(Val(sd), "0"), Trim(s)), Val(sd))
End Function
ysr
发表于 2021-3-27 14:09
还琢磨琢磨前面那个迭代公式怎么计算吧,是复数域中的计算,请老师指点!
ysr
发表于 2021-3-28 15:02
sinx=(e^ix-e^-ix)/(2i),cosx=(e^ix+e^-ix)/2.\叫做欧拉公式.将e^ix=cosx+isinx中的x取作π就得到:e^iπ+1=0.这个也叫做欧拉公式
ysr
发表于 2021-3-28 22:29
复数除法定义:满足(c+di)(x+yi)=(a+bi)的复数x+yi(x,y∈R)叫复数a+bi除以复数c+di的商。
运算方法:可以把除法换算成乘法做,在分子分母同时乘上分母的共轭.。所谓共轭你可以理解为加减号的变换,互为共轭的两个复数相乘是个实常数。
ysr
发表于 2021-3-28 22:44
复数除法:(a+bi)/(c+di)=((a+bi)/(c+di))*((c-di)/(c-di))=((ac+bd)/(c^2+d^2))+((bc-ad)/(c^2+d^2))i
ysr
发表于 2021-3-28 22:53
棣莫佛定理:对于复数z=r(cosθ+isinθ),有z的n次幂为:z^n=r^n*(cosnθ+isinnθ).
ysr
发表于 2021-3-28 22:56
这个迭代法会用到这么多公式,每次迭代都会用到多种公式,都是大数运算,即使迭代次数很少,速度也不会太快,消耗时间长,这个怕是不快。
ysr
发表于 2021-3-29 13:55
看来无法提高正余弦高精度值的计算速度,无法提高利用快速傅里叶变换的大数乘法的速度,准备用分治法和快速傅里叶变换结合的方法,来提高大数乘法的速度。
ysr
发表于 2021-3-29 17:15
50000000000000000000000000000000000000000000000001有50位,用时0.1210938秒。
4999999999999999999999999有25位,用时0.015625秒。
500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000有150位,用时2.738281秒。
把我的模仿手工计算的大数乘法程序改成4位一组的,居然快了一点。