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位一组的,居然快了一点。
页: 1 2 [3] 4
查看完整版本: 请问这个多项式是哪个三角函数的值?