雪冬 发表于 2024-3-11 09:33:58

计算π小数点后1000位

计算结果如图,

bis 发表于 2024-3-11 18:47:35

量子隧道 发表于 2024-3-11 11:32
我曾经用几个pi的级数展开式,在matlab里算过,印象中几个级数收敛速度差别很大。

拉马努金。

飞翔的空灵 发表于 2024-3-11 11:00:37

用什么算法算的

落花萧然 发表于 2024-3-11 11:22:33

Python两行代码

from sympy import *
print(N(pi,1000))

量子隧道 发表于 2024-3-11 11:32:19

我曾经用几个pi的级数展开式,在matlab里算过,印象中几个级数收敛速度差别很大。

雪冬 发表于 2024-3-11 15:23:41

我用的是达尔文系统。

tony321 发表于 2024-3-11 19:49:00

当年学习时可以背到小数点后100位,现在只能背到20位了

雪冬 发表于 2024-3-12 10:33:33

很厉害!:)

雪冬 发表于 2024-3-12 10:41:58

上面python程序运行情况

zhxzhx 发表于 2024-3-12 11:15:44

一个 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();
}

雪冬 发表于 2024-3-12 12:34:39

zhxzhx 发表于 2024-3-12 11:15
一个 C 计算π的
#include
#include


运算结果如何?

chipset009 发表于 2024-3-12 12:34:44

太菜。看看别人咋干的,源自高中生。http://numberworld.org/y-cruncher/#Download

chipset009 发表于 2024-3-12 12:41:08

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...

dabfxz 发表于 2024-3-12 13:41:19

量子隧道 发表于 2024-3-11 11:32
我曾经用几个pi的级数展开式,在matlab里算过,印象中几个级数收敛速度差别很大。

Matlab的代码呢?让大家试试看。

dabfxz 发表于 2024-3-12 13:51:37

chipset009 发表于 2024-3-12 12:34
太菜。看看别人咋干的,源自高中生。http://numberworld.org/y-cruncher/#Download

到哪里一看,真的开眼界了。
页: [1] 2
查看完整版本: 计算π小数点后1000位