计算1万位的Pi值,用Julia实现的Chudnovsky算法耗时0.16秒,作为比较,用Julia实现的另一个算法([Julia&Delphi]快速计算圆周率 Pi (π) 值_BlueStorm的博客-CSDN博客)耗时4.87秒, 相比起来性能提高了20倍。
function CalcPi_2()
#Decimal.precision = this.digits + 2;
decimalwidth = 10000;
digitsPerIteration = 14
precision = (div(trunc(Int64, decimalwidth*log2(10)), 64) + 1) * 64
setprecision(BigFloat, precision)
iterations = div(decimalwidth, digitsPerIteration-1) + 1;
C = 426880 * sqrt(big(10005))
f1 = big(1); f3 = big(1); f6 = big(1);
Mk = big(1)
Lk = big(13591409)
Xk = big(1)
pi = Mk * Lk / Xk
for i in 1:iterations
k = big(i)
f1 *= i;
for j in (3i-2):i
f3 *= j
end
for j in (6i-5):i
f6 *= j
end
Mk = f6/(f3 * f1^3)
Lk += 545140134
Xk *= (-262537412640768000)
pi += Mk * Lk / Xk
end
pi = C/pi;
end;
@time CalcPi2();