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

求圆周率算法(割圆术)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圆内点的数量占总撒点数的比例计算圆周率值。 ... 阅读详情

相关推荐

表格数据学习的图神经网络综述

今天学习一篇发表在中科院一区期刊《ACM Computing Surveys》的综述文章《Graph Neural Networks for Tabular Data Learning: A Survey with Taxonomy & Directions》,该刊主要刊载计算机理论方法领域的系统性综述与教程论文,注重跨学科技术融合研究,最新的影响因子为28.0。本文的目的在于通过学习这篇文章,了解关于表格数据学习点图神经网络一些基础知识。

qq_41009600的博客 800

圆周率的计算

圆周率的计算 整理三种计算圆周率的方法,体验下数学的美妙和编程的神奇 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万+

[NVME] CMBLOC-Controller Memory Buffer Location

CMBLOC-Controller Memory Buffer Location

jinyuya的博客 990

【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万+

激光SLAM算法性能对比:在Ubuntu20.04上实测Point-LIO/FAST_LIO2/Faster-LIO的运行效果

本文在Ubuntu 20.04平台上对Point-LIO、FAST-LIO2和Faster-LIO三款激光SLAM算法进行了深度实测与性能对比。通过量化分析绝对轨迹误差、CPU/内存占用及单帧处理延迟等核心指标,结合室内外场景数据,为高精度测绘、服务机器人及自动驾驶等不同应用场景提供了清晰的选型指南和实战调优建议。

weixin_28335283的博客 368

spring boot 集成cas(一) 服务端搭建

简单点就是统一服务认证,多个系统一次登录。俗称单点登录。

慕孑晨的博客 1957

计算圆周率的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万+

三极管、MOS管和晶体管综合对比——《器件手册--三极管、MOS管和晶体管》

IGBT(Insulated Gate Bipolar Transistor,绝缘栅双极型晶体管)是一种复合全控型电压驱动式功率半导体器件,结合了MOSFET的高输入阻抗、开关速度快的优点和双极型晶体管(BJT)的低导通压降、高电流密度的优点。例如,在NPN型三极管中,当基极电流增加时,集电极电流会按照一定的比例(放大倍数β)增加,这个比例通常在几十到几百之间。在NMOS管中,当栅极相对于源极的电压(Vgs)小于开启电压(Vth)时,漏极和源极之间没有导电沟道,电流无法通过,处于截止状态。

XU157303764的博客 2883

python小程序一个:π的计算

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

suoper的博客 5489

【面试系列】数据分析师高频面试题及详细解答

本文为数据分析师岗位提供了详尽的面试题库和解答,涵盖初级、中级和高级三个层次。初级面试题涉及基本的数据处理和统计分析知识,如SQL查询、数据清理和基础统计概念。中级面试题则重点考察数据可视化、复杂查询和数据建模等技能。高级面试题则深入探讨高级统计方法、大数据处理和高级分析工具的使用。通过这些问题和解答,候选人可以全面了解数据分析师岗位所需的技能,帮助其更好地准备面试。常考知识点总结部分则系统归纳了数据分析师岗位的关键技能领域。

在路上的专栏 5230

【100分- 求最多可以派出多少支团队】(题目+思路+Java&C++&Python解析+在线测试)

用数组代表每个人的能力,一个比赛活动要求参赛团队的最低能力值为N,每个团队可以由1人或者2人组成,且1个人只能参加1个团队,计算出最多可以派出多少只符合要求的团队。

m0_73659489的博客 313

圆周率π的精确计算

一、圆周率π计算 #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

产品缺陷检测:表面缺陷检测_(1).产品缺陷检测基础理论

确定像素之间的相似性准则,如灰度值的差异。

zhubeibei168的博客 832

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

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

weixin_39829497的博客 420

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

java计算计算圆周率

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

zhao33699的专栏 7365

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

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

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

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、付费专栏及课程。

余额充值