程序计算精确圆周率π的方法

求圆周率算法(割圆术)c语言实现 1、算法设计原理分析 利用周长为1的圆的周长为2Π,采用割圆术,从开始的正六边形(周长为6),循环切割求正12边形、正24边形……的边长(勾股定理),从而求出正多边形的周长,来近似求解出2Π的值。 整个算法采用循环,求解正多边形的边长à正多边形的周长à周长的一半。 2、程序设计 #include <stdio.h> #include <math.h> void pai(int n); int main() { int n; printf... 阅读详情
AI摘要

本文系统讲解多种高精度计算圆周率π的算法实现,涵盖Wallis级数、Machin公式、Gauss-Legendre(二次收敛)和Chudnovsky(工业级)等主流方法;重点剖析C语言中数组模拟大数运算、万进制优化、GMP库调用等关键技术,并对比各算法收敛速度与性能。内容聚焦于信息技术领域的数值计算、高精度算术与算法优化。

圆周率π = 3.14159265358… 是一个超越数,更是一个"正规数"——你的名字、生日、电话号码,甚至《西游记》整本书的编码,理论上都藏在π的无限小数位中。从古代的几何方法到现代计算机算法,人类计算π精度的能力在不断进步。直到2024年3月14日,美国加州计算机存储公司Solidigm宣布,他们耗时75天将圆周率已经计算到小数点后约105万亿位。

本文将带你从最简Python一行代码开始,逐层深入C语言高精度π计算的实现原理、代码优化技巧,并对比多种主流算法。文末给出可直接运行的"万进制加速版"代码,计算10000位仅需原版1/4的时间。


目录

  1. 极简起步:Python + mpmath 一行搞定
  2. Wallis级数推导与朴素C实现
  3. 突破double瓶颈:GMP高精度库版本
  4. 核心优化:数组模拟大数运算(10000位实战)
  5. 性能翻倍:从10进制升级到万进制
  6. 算法对比:Machin / Gauss-Legendre / BBP / Chudnovsky
  7. 趣味扩展:自然底数e的高精度计算
  8. 代码赏析:IOCCC获奖作品解读

1. 极简起步:Python + mpmath 一行搞定 {#1-极简起步}

如果你只想"用一下"π,Python 的 mpmath 库是最快的选择:

from mpmath import mp

mp.dps = 1000         # 设置精度为1000位
print(mp.pi)          # 输出1000位圆周率

mpmath 底层用 C 实现,内部使用的是 Chudnovsky 算法(后文会介绍),收敛极快。但如果想理解"高精度计算"的底层原理,我们从更基础的算法开始。


2. Wallis级数推导与朴素C实现 {#2-wallis级数}

2.1 公式推导

Wallis 乘积公式的级数展开形式为:

π/2 = 1 + 1/3 + (1/3)·(2/5) + (1/3)·(2/5)·(3/7) + (1/3)·(2/5)·(3/7)·(4/9) + ...

令每一项 zₙ 满足递推关系:

z₀ = 2
zₙ = zₙ₋₁ × a / b    (其中 a=1,2,3..., b=3,5,7...)

则:π = z₀ + z₁ + z₂ + …

2.2 朴素C实现(double精度,约14位)

#include <stdio.h>

int main()
{
    double x = 2.0, z = 2.0;
    int a = 1, b = 3;

    while (z > 1e-16)   // 【优化】原文用 z>0,理论上永远不会为0
    {
        z = z * a / b;
        x += z;
        a++;
        b += 2;
    }
    printf("π = %.14f\n", x);   // 输出: 3.14159265358979
    return 0;
}

局限:double 只有 8 字节(约 15-16 位有效数字),无法突破。


3. 突破 double 瓶颈:GMP 高精度库版本 {#3-gmp版本}

想用原生 C 获得更高精度,可以借助 GNU 的 GMP(大数库) + MPFR(高精度浮点库):

#include <stdio.h>
#include <gmp.h>

int main()
{
    mpf_set_default_prec(512);  // 512比特 ≈ 154位十进制精度

    mpf_t x, z, term_a, term_b, eps;
    mpf_inits(x, z, term_a, term_b, eps, NULL);

    mpf_set_ui(x, 2);
    mpf_set_ui(z, 2);
    mpf_set_ui(term_a, 1);
    mpf_set_ui(term_b, 3);

    // 【优化】用 eps 控制精度,而非硬编码字符串比较
    mpf_set_str(eps, "1e-100", 10);

    int cnt = 0;
    while (mpf_cmp(z, eps) > 0)
    {
        mpf_mul(z, z, term_a);
        mpf_div(z, z, term_b);
        mpf_add(x, x, z);
        mpf_add_ui(term_a, term_a, 1);
        mpf_add_ui(term_b, term_b, 2);
        cnt++;
    }

    gmp_printf("迭代 %d 次\nπ = %.100Ff\n", cnt, x);

    mpf_clears(x, z, term_a, term_b, eps, NULL);
    return 0;
}
// 编译: gcc main.c -lgmp -lmpfr

但 GMP 终究是"外挂",下面我们来手写一个纯C的高精度方案。


4. 核心优化:数组模拟大数运算(10000位实战) {#4-数组模拟大数}

4.1 基本原理

用一个 char 数组,每个元素存储 0-9 的一位十进制数,模拟手算竖式的 乘法进位 和 除法试商 过程:

数组布局: [x₀][x₁].[x₂][x₃]...[xₙ]
           ↑ 整数部分  ↑ 小数点    ↑ 小数部分

4.2 优化版代码(含详细注释)

#include <stdio.h>
#include <string.h>

int main()
{
    const int ARRSIZE = 10100;  // 数组大小(多留一些防止溢出)
    const int DISPCNT = 10000;  // 实际显示位数

    // x[0]备用, x[1]为整数部分, x[2..n]为小数部分
    char x[10100], z[10100];
    int a = 1, b = 3;
    int i, run_flag, cnt = 0;

    memset(x, 0, sizeof(x));
    memset(z, 0, sizeof(z));
    x[1] = 2;
    z[1] = 2;

    // 【优化】使用 do-while 避免每次多算一轮
    do
    {
        // --- 步骤1: z = z * a ---
        int carry = 0;
        for (i = ARRSIZE - 1; i >= 0; i--)
        {
            int tmp = z[i] * a + carry;
            z[i] = tmp % 10;
            carry = tmp / 10;
        }

        // --- 步骤2: z = z / b ---
        carry = 0;
        for (i = 0; i < ARRSIZE; i++)
        {
            int tmp = z[i] + carry * 10;
            z[i] = tmp / b;
            carry = tmp % b;
        }

        // --- 步骤3: x = x + z ---
        // 同时检测 z 是否全为0(收敛判断)
        run_flag = 0;
        for (i = ARRSIZE - 1; i > 0; i--)
        {
            int sum = x[i] + z[i];
            x[i] = sum % 10;
            x[i - 1] += sum / 10;
            run_flag |= z[i];   // 只要有非零位就继续
        }

        a++;
        b += 2;
        cnt++;
    } while (run_flag && cnt < 100000);

    // --- 输出 ---
    printf("迭代 %d 次\n", cnt);
    printf("π = %d.", x[1]);
    for (i = 0; i < DISPCNT; i++)
    {
        if (i > 0 && i % 100 == 0)  printf("\n");
        printf("%d", x[i + 2]);
    }
    printf("\n");
    return 0;
}

运行结果:迭代约 33538 次 即可达到 10000 位精度。该算法约 3.3 轮迭代产生一位正确数字。


5. 性能翻倍:从10进制升级到万进制 {#5-万进制加速}

5.1 为什么能提速?

上述代码每个数组元素只存 0-9,每次迭代要对 ~10000 个元素各做一次乘除——相当于 10000 次单精度运算。

如果把每个元素改为存 0-9999(万进制),数组长度缩为原来的 1/4,速度直接提升约 4倍:

#include <stdio.h>
#include <string.h>

#define RADIX  10000    // 万进制基数
#define WIDTH  4        // 每个元素对应4位十进制

int main()
{
    const int ARRSIZE = 2600;   // 万进制数组(2600×4 ≈ 10400位)
    const int DISPCNT  = 10000;

    int x[ARRSIZE], z[ARRSIZE];
    int a = 1, b = 3;
    int cnt = 0, run_flag;

    memset(x, 0, sizeof(x));
    memset(z, 0, sizeof(z));
    x[1] = 2;
    z[1] = 2;

    do
    {
        // --- z = z * a / b ---
        long long carry = 0;
        int i;
        for (i = ARRSIZE - 1; i >= 0; i--)
        {
            carry += (long long)z[i] * a;
            z[i] = (int)(carry % RADIX);
            carry /= RADIX;
        }

        carry = 0;
        for (i = 0; i < ARRSIZE; i++)
        {
            carry = carry * RADIX + z[i];
            z[i] = (int)(carry / b);
            carry %= b;
        }

        // --- x = x + z ---
        run_flag = 0;
        carry = 0;
        for (i = ARRSIZE - 1; i >= 0; i--)
        {
            carry += (long long)x[i] + z[i];
            x[i] = (int)(carry % RADIX);
            carry /= RADIX;
            run_flag |= z[i];
        }

        a++;
        b += 2;
        cnt++;
    } while (run_flag && cnt < 100000);

    // --- 格式化输出 ---
    printf("迭代 %d 次(万进制加速版)\n", cnt);
    printf("π = %d.", x[1]);
    for (int i = 0; i < DISPCNT; i++)
    {
        if (i > 0 && i % 100 == 0) printf("\n");
        // 从万进制数组中取出每一位十进制数字
        int idx = i / WIDTH + 2;
        int pos = WIDTH - 1 - (i % WIDTH);
        int digit = x[idx];
        while (pos--) digit /= 10;
        printf("%d", digit % 10);
    }
    printf("\n");
    return 0;
}

性能对比(计算10000位):

版本数组大小每次迭代运算量相对耗时
原版(十进制)10100~10100次单精度运算1.0×
万进制加速版2600~2600次32位运算~0.25×

6. 算法对比:哪种算法最快? {#6-算法对比}

Wallis 级数虽然实现简单,但收敛速度并不理想(约 3.3 轮/位)。以下是主流π计算算法的对比:

算法每次迭代增加位数10000位迭代次数复杂度实现难度
Wallis 级数(本文)~0.3 位~33,000O(n²)★☆☆☆☆
Machin 公式 (1706)~1.4 位~7,100O(n²)★★☆☆☆
Gauss-Legendre (1975)翻倍~14O(n log²n)★★★☆☆
BBP 公式 (1995)~1.2 位~8,300O(n²)★★★☆☆
Chudnovsky (1988)~14 位~715O(n log³n)★★★★★

6.1 Machin 公式(推荐入门优化)

π/4 = 4·arctan(1/5) - arctan(1/239)

收敛速度约 1.4 位/项,比 Wallis 快 4 倍以上,且实现难度适中:

// arctan(1/x) 的级数展开:1/x - 1/(3x³) + 1/(5x⁵) - ...
// 套用数组大数运算即可,留作读者练习

6.2 Gauss-Legendre 算法(二次收敛,王者速度)

该算法每次迭代精度翻倍,计算 10000 位仅需 14 次迭代:

初始化: a₀ = 1,  b₀ = 1/√2,  t₀ = 1/4,  p₀ = 1
迭代:
  aₙ₊₁ = (aₙ + bₙ) / 2
  bₙ₊₁ = √(aₙ × bₙ)
  tₙ₊₁ = tₙ - pₙ × (aₙ - aₙ₊₁)²
  pₙ₊₁ = 2 × pₙ
结果: π ≈ (aₙ + bₙ)² / (4 × tₙ)

这是目前不使用FFT乘法前提下最快的π算法,强烈推荐作为进阶学习目标。

6.3 Chudnovsky 算法(工业级)

mpmath、Mathematica 等专业软件的首选,每项增加约 14 位精度:

1/π = 12 × Σ (-1)ᵏ × (6k)! × (13591409 + 545140134k)
           ─────────────────────────────────────────
           (3k)! × (k!)³ × 640320³ᵏ⁺³/²

需要配合**二分拆分(Binary Splitting)**技术才能高效实现。


7. 趣味扩展:自然底数 e 的高精度计算 {#7-扩展}

同样的数组模拟思路也适用于 e = 2.71828…:

#include <stdio.h>

int main()
{
    const int TIMES = 1000;
    int f[TIMES + 1];
    int n, d, e_digit = 0;

    for (n = TIMES; n > 0; n--)
        f[n] = 10;

    printf("e = 2.");
    for (int i = 0; i < TIMES; i++)
    {
        d = 0;
        for (n = TIMES; n > 0; n--)
        {
            d = d + f[n] * 10;
            f[n] = d % n;
            d = d / n;
        }
        printf("%d", (e_digit + d / 10) % 10);
        e_digit = d % 10;
    }
    printf("\n");
    return 0;
}

原理基于:e = 1 + 1/1! + 1/2! + 1/3! + ...,利用秦九韶算法(Horner’s method)变形实现。


8. 代码赏析:IOCCC 获奖作品解读 {#8-代码赏析}

8.1 800位圆周率(经典一行流)

某年 IOCCC(国际C语言代码混淆竞赛) 的获奖作品,仅 3行代码 输出800位π:

#include <stdio.h>
long a = 10000, b, c = 2800, d, e, f[2801], g;
int main()
{
    for (; b - c;) f[b++] = a / 5;
    for (; d = 0, g = c * 2; c -= 14, printf("%.4d", e + d / a), e = d % a)
        for (b = c; d += f[b] * a, f[b] = d % --g, d /= g--, --b; d *= b)
            ;
}

这段代码实现的是 Spigot 算法(逐位输出),利用"整数只留余数"的方式避免了高精度浮点运算。

8.2 Bellard 的梅森素数计算器

Bellard 在 IOCCC 2000 上的获奖作品,使用 NTT(数论变换) 在极短时间内验证了第38个梅森素数(2⁶⁹⁷²⁵⁹³−1,有 2,098,960 位)。这展示了"用整数运算模拟大数"能达到的惊人高度。


一句话:理解原理用 Wallis 级数 + 数组大数;追求速度用 Gauss-Legendre;工程落地直接调 GMP/mpmath。


参考:

【Python】蒙特卡罗方法计算圆周率及给定随机数种子 蒙特卡罗方法 利用随机点分布,让随机点足够的多,用指定区域随机点数与总区域随机点数做比值来求取指定区域面积 求解圆周率,在一个正方形中撒点,根据在1/4圆内点的数量占总撒点数的比例计算圆周率值。 ... 阅读详情

相关推荐

Gröbner基方法入门第I部分:项序和约化

Gröbner基方法入门第I部分:项序和约化 理想的准素分解与矩阵分解是计算代数的核心问题,它们在计算机代数、计算代数几何、代数编码和密码学、多维系统理论等学科都有非常重要的理论意义与应用价值.Gröbner基理论是研究理想的准素分解与矩阵素分解的重要工具之一.更简单地概括:Gröbner基方法是从任意一个多项式理想的一组给定生成元,计算另一组性质良好的生成元,并称为该理想的Gröbner基.它能用来判定任意多项式是否属于该理想. Gröbner基的代数算法是Buchberger在1960年代开发的,并

MinCong Luo的博客 4268

圆周率的计算

圆周率的计算 整理三种计算圆周率的方法,体验下数学的美妙和编程的神奇 1.传说中计算π的超牛的c程序3行代码计算π后面800位)1:传说中计算π的超牛的C程序,3行代码,计算π后面2800位… 原c代码如下: #include "stdio.h" long a=10000, b, c=2800, d, e, f[2801], g; void main() { for( ;b-c; ) f[b++]...

u013617229的博客 2万+

美团外卖 mtgsig 1.2 逆向工程与补环境实战指南

本文深入解析了美团外卖核心风控参数mtgsig 1.2的生成机制与逆向实战。通过拆解其复杂的JSON结构,揭示了设备指纹、环境信息加密等关键字段。重点阐述了在Node.js中模拟浏览器环境(补环境)的核心方法,包括DOM/BOM对象、本地存储及Canvas/WebGL等高级指纹的模拟技巧,为安全研究和合规自动化测试提供了一套完整的技术指南。

uber9的博客 410

【C语言程序设计】C语言求圆周率π(三种方法)

题目一: 利用公式①计求π的近似值,要求累加到最后一项小于10^(-6)为止。 程序代码: #include <stdio.h> #include <stdlib.h> #include <math.h> int main(){ float s=1; float pi=0; float i=1.0; float n=1.0; while(fabs(i)>=1e-6){ ...

HUYA69的博客 3万+

【C++】lambda表达式

本篇文章我们要学习的是lambda表达式,它是C++11新增的一种特别方便的语法,相较于之前的函数指针以及仿函数都方便了不少,下面就让我们一起来学习吧。

malloc不出对象的博客 2632

突破NER性能瓶颈:BERT与LLM协同的混合架构实践

性能卓越:在多个测试集上,F1分数比单一模型提升5-15%成本可控:相比纯LLM方案,成本降低60%以上易于落地:架构清晰,便于调试和优化这种"专才+通才"的组合思路可以扩展到其他NLP任务中,如关系抽取、事件提取、文本分类等。更精细的流水线优化多模型投票机制在线学习与自适应调整不追求单一模型的万能,而是通过精心设计的组合,让每个组件发挥其独特优势,最终实现系统性能的最优化。欢迎在评论区分享你在NER任务中的实践经验,或者对这个混合架构的改进建议!

Ven%的博客 1022

计算圆周率的C++程序(30000位)

<br />//计算圆周率的C++程序(30000位)<br />#include <stdlib.h><br />#include <math.h><br />#include <memory.h><br />#define N 10000<br />//using namespace std; <br />void mult(int *a,int b,int *s)<br />{ for(int i=N,c=0; i>=0; i--)<br /> { int y=a[i]*b+c;<br />  c=y

wanchuanhua的专栏 1万+

prometheus普罗米修斯集监控外部k8s

prometheus普罗米修斯集监控外部k8s

你是我一生的追求 2249

python小程序一个:π的计算

通过割圆法来计算π的大小是一种常用的方法。---------------------------------------------------------------------------------------------------------------------------------以下装载自百度百科,链接:https://baike.baidu.com/item/%E5%89%B...

suoper的博客 5490

【深度解析】解决 NVIDIA 显卡“掉卡”与 Xid 79 错误:开启持久化模式 (Persistence Mode)

【深度解析】解决 NVIDIA 显卡“掉卡”与 Xid 79 错误:开启持久化模式 (Persistence Mode)

Edward的博客 865

025、空间降噪与时域降噪:噪声抑制与细节保留的平衡艺术

《降噪技术的平衡艺术:空间与时域降噪的协同优化》 本文深入探讨了图像处理中空间降噪与时域降噪的技术原理与工程实践。空间降噪通过像素级处理提升单帧质量,而时域降噪则利用帧间信息增强稳定性。文章揭示了两种方法在实际应用中的矛盾点:过度降噪会导致细节损失,影响后续算法性能。作者结合车载环视系统等实战案例,详细分享了参数调优经验,包括运动自适应策略、边缘保持技巧和嵌入式平台优化方案。特别强调降噪的最终目标应服务于下游算法需求,而非单纯追求图像美观。文章为工程人员提供了从理论到实践的完整指导,展现了降噪技术在效果与性

sundong_81的博客 186

圆周率π的精确计算

一、圆周率π计算 #include <bits/stdc++.h> using namespace std; long a=10000,b,c=56000,d,e,f[56001],g; int main(){ for(;b-c ; )f[b++]=a/5; for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a...

weixin_30617561的博客 246

【tessy】软件环境配置:Keil C51 Keil uVision UVSC (Default)

本文详细说明了tessy软件如何配置【Keil C51 Keil uVision UVSC (Default)】环境,具体操作步骤和注意事项

qq_37282365的博客 601

python计算圆周率_Python实现计算圆周率π的值到任意位的方法示例

本文实例讲述了Python实现计算圆周率π的值到任意位的方法。分享给大家供大家参考,具体如下:一、需求分析输入想要计算到小数点后的位数,计算圆周率π的值。二、算法:马青公式π/4=4arctan1/5-arctan1/239这个公式由英国天文学教授约翰·马青于1706年发现。他利用这个公式计算到了100位的圆周率。马青公式每计算一项可以得到1.4位的十进制精度。因为它的计算过程中被乘数和被除数都不...

weixin_39829497的博客 420

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

java计算计算圆周率

这两天在网上看到一个题,已知Pi可以用函数4 * (1 – 1/3 + 1/5 – 1/7 + …) 计算,计算出小数点后五位(计算圆周率)。于是手动写了一个小demo ,欢迎大家留言,进行交流与指教。     public class PiTest { private static int bytelimit=5;//小数后限制位数 /** * @author zhao

zhao33699的专栏 7365

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

7-15 计算圆周率 (15分)

7-15计算圆周率(15分) 根据下面关系式,求圆周率的值,直到最后一项的值小于给定阈值。 ​2​​π​​=1+​3​​1​​+​3×5​​2!​​+​3×5×7​​3!​​+⋯+​3×5×7×⋯×(2n+1)​​n!​​+⋯ 输入格式: 输入在一行中给出小于1的阈值。 输出格式: 在一行中输出满足阈值条件的近似圆周率,输出到小数点后6位。 输入样例: 0.01 输出样例: 3.132157 作者 杨起帆 单位 浙江大学城市学院 代码长度限制 16 KB 时间限..

32bin的博客 1301

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

c++中sin,cos,arcsin等和在C/C++中使用pi (π) 值

先#include<math.h> 反3角函数有 acos(double),asin(double),atan(double),atan(double,double),返回值 double cos(double x) 在C/C++中使用pi (π) 值 马青公式: π=16arctan1/5-4arctan1/239 走进无限美妙的数...

weixin_30663391的博客 1910

7-1 计算π的值 (10分) java

在数学中,我们可以通过π=4╳(1-1/3+1/5-1/7+1/9-…1/(2╳n+1)) 来计算,n越大,计算值越靠近。输入正整数n来计算π。 输入样例: 在这里给出一组输入。例如: 100 输出样例: 在这里给出相应的输出。例如: 3.1315929035585537 import java.util.Scanner; public class Main{ public static void main(String[] args){ double ans=0;

m0_46553277的博客 1263

计算圆周率

计算圆周率 根据下面关系式,求圆周率的值,直到最后一项的值小于给定阈值。 输入格式: 输入在一行中给出小于1的阈值。 输出格式: 在一行中输出满足阈值条件的近似圆周率,输出到小数点后6位。 输入样例: 0.01 输出样例: 3.132157 # include &amp;amp;amp;lt;stdio.h&amp;amp;amp;gt; # include &amp;amp;amp;lt;math.h

星宇康的博客 681

编写python程序 兀 3_用python语言算π值并且带有进度条

用python算圆周率π1.准备第三方库pip打开cmd 输入代码:pip install requests ,随后就会成功因为小编已经安装好了,所以就不把图截出来了2.利用马青公式求π3.用python语言编写出求圆周率到任意位的程序如下:from math import *from tqdm import tqdmfrom time import *total,s,n,t=0.0,1,1.0,...

weixin_39700220的博客 634

Java求圆周率割圆术,用割圆术求圆周率π

圆周率π的递推公式如下: 以半径为1的圆开始,依次在圆内画正六边形、正十二边形、正6n边形...。只有n趋近于无穷大,便可以得到足够接近圆的正多边形,计算的圆周率π也就越精确。完整代码如下:package cn.whut.num;import java.util.Scanner;public class pai {static void cyclotomic(int n)//割圆术算法{int i...

weixin_28728495的博客 720

小数点用计算机怎么用,计算机如何精确到小数点后一百位

easy,内容如下main(){printf("3。141 5926 5358 9793 2384 6264 3383 2795 0238 4197 1693 9937 5105 8209 7494 4592 3078 1640 6286 2089 9862 8034 8753 4211 7067 9321 4808 6513 2823 0664 7093 8446 0955 0582 2317 ...

weixin_42500477的博客 880

2012年3月14日20:37:40 今天是世界圆周率日 上Java算π的算法 1000位的

import java.math.BigDecimal; public class PI { public static void main(String args[]) throws NumberFormatException { int digits = 1000; // 计算1000位 long begin = System.currentTimeMillis(); Stri

jacarri的专栏 2595

25593 Problem G 例题5-7 求圆周率pi的近似值

问题 G: 例题5-7 求圆周率pi的近似值 时间限制:1 Sec内存限制:12 MB 题目描述 用如下公式 求圆周率PI的近似值,直到发现某一项的绝对值小于10-6为止(该项不累加)。 要求输出的结果总宽度占10位,其中小数部分为8位。 程序中使用浮点型数据时,请定义为双精度double类型。 如果需要计算绝对值,可以使用C语言数学库提供的函数fabs,如求x的绝对值,则为...

漫浸天空的雨色的备忘录~ 2037

Python 利用turtle库使用蒙特卡洛方法计算圆周率

Python 利用turtle库使用蒙特卡洛方法计算圆周率图片实例 from random import random import turtle as t from math import sqrt darts = 10000 hits = 0 t.penup() t.speed(0) t.tracer(False) for i in range(1,darts + 1): x = random() y = random() dist = sqrt(x**2 + y**2)

TailPrint的博客 4532

蒙特卡罗方法求圆周率

对圆周率的jingque圆周率往往被

小潭爱游戏 1574
上一篇: JS 字符串和十六进制间互换
下一篇: [单片机] MCU自定义引脚当串口
wabil
博客等级 码龄19年 152粉丝 159原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值