融天岭商周客cd:我想的圆周率计算法,1万位十进制精度计算时间在数秒至数十秒左右| 科学版 - 沧浪亭 - ...

来源:百度文库 编辑:九乡新闻网 时间:2024/04/29 14:34:59
我想的圆周率计算法,1万位十进制精度计算时间在数秒至数十秒左右我用自制的长浮点数计算pi,1万位十进制精度计算时间在数秒至数十秒左右,视机器性能而定,
基本算法是
x=3或者3.1或者3.14等等;
循环(x+=sin(x));
每计算一次sin可以获得一倍的精度,sin是用级数叠加的,每叠加一次需要计算4次乘法,一次除法,一次加法,获得2位左右的10进制精度
加乘除法是用最常规的方法计算的,没有使用傅立叶变换,只是在汇编级进行了优化,利用了x86的指令集的特性
基本的数据结构是使用一个无符号整数数组,每个都是一个计算单位,(2^32=4G)进制,表示时再转回10进制,一个符号标志,一个指数标志
性能在使用常规方法计算中应该算快的了吧
这个计算方法是在我算sin(3.14)=0.00159xxxx时想到的

我用了Martin公式(pi=16*arctan(1/5)-4*arctan(1/239))
发现比我的算法还慢

因为sin的收敛的速度比atan快,叠加的次数少
sin x = x-x^3/3!+x^5/5!-...(-1)k-1*x2k-1/(2k-1)!+... (-∞arctan x = x - x^3/3 + x^5/5 - ... (x≤1)
sin式的被除数部分是阶乘,arctan是累加(?)

实际计算时,sin的x是3.14xxx,arctan是1/5,1/239
即使如此还是sin比较快


这个算法的优雅之处在于简单(原理简单,易于理解),和不算差的性能