计算π小数点后1000位
计算结果如图, 用什么算法算的 Python两行代码from sympy import *
print(N(pi,1000)) 我曾经用几个pi的级数展开式,在matlab里算过,印象中几个级数收敛速度差别很大。 我用的是达尔文系统。 当年学习时可以背到小数点后100位,现在只能背到20位了 很厉害!:) 上面python程序运行情况 一个 C 计算π的
#include <string.h>
#include <stdio.h>
#define ARRSIZE 1550
#define DISPCNT 1500
//定义数组大小,显示位数
char x, z; //x x . x x x .... x
int a=1, b=3, c, d, Run=1, Cnt=0,i;
void main()
{
memset(x,0,ARRSIZE);
memset(z,0,ARRSIZE);
x = 2;
z = 2;
printf("\r\n计算...\r\n");
//locate(0,0);
while(Run && (++Cnt<10000))
{
//z*=a;
d = 0;
for(i=ARRSIZE-1; i>0; i--)
{
c = z*a + d;
z = c % 10;
d = c / 10;
}
//z/=b;
d = 0;
for(i=0; i<ARRSIZE; i++)
{
c = z+d*10;
z = c / b;
d = c % b;
}
//x+=z;
Run = 0;
for(i=ARRSIZE-1; i>0; i--)
{
c = x + z;
x = c%10;
x =x + c/10;
Run = Run|z;
}
a++;
b=b+2;
}
printf("计算了%d次\r\n",Cnt);
printf("Pi=%d.",x);
for(i=0; i<DISPCNT; i++)
{
//if(i && ((i%80)==0))
//putchar('\n');
putchar(x|0x30);
}
getchar();
}
zhxzhx 发表于 2024-3-12 11:15
一个 C 计算π的
#include
#include
运算结果如何? 太菜。看看别人咋干的,源自高中生。http://numberworld.org/y-cruncher/#Download C++的快(y-cruncher),脚本慢多了,下面Python的。
import decimal
def binary_split(a, b):
if b == a + 1:
Pab = -(6*a - 5)*(2*a - 1)*(6*a - 1)
Qab = 10939058860032000 * a**3
Rab = Pab * (545140134*a + 13591409)
else:
m = (a + b) // 2
Pam, Qam, Ram = binary_split(a, m)
Pmb, Qmb, Rmb = binary_split(m, b)
Pab = Pam * Pmb
Qab = Qam * Qmb
Rab = Qmb * Ram + Pam * Rmb
return Pab, Qab, Rab
def chudnovsky(n):
"""Chudnovsky algorithm."""
P1n, Q1n, R1n = binary_split(1, n)
return (426880 * decimal.Decimal(10005).sqrt() * Q1n) / (13591409*Q1n + R1n)
print(chudnovsky(2))# 3.141592653589793238462643384
decimal.getcontext().prec = 100
for n in range(2,10):
print(f"{n=} {chudnovsky(n)}")# 3.14159265358979323846264338... 量子隧道 发表于 2024-3-11 11:32
我曾经用几个pi的级数展开式,在matlab里算过,印象中几个级数收敛速度差别很大。
Matlab的代码呢?让大家试试看。 chipset009 发表于 2024-3-12 12:34
太菜。看看别人咋干的,源自高中生。http://numberworld.org/y-cruncher/#Download
到哪里一看,真的开眼界了。
页:
[1]
2