如何计算Pi?python

news/2024/12/21 21:24:34/

怎样计算PI?

下面是python程序:

def calculate_pi(iterations):
    pi = 0
    for i in range(iterations):
        term = (-1) ** i / (2 * i + 1)
        pi += term
    pi *= 4
    return pi
# 设置迭代次数
iterations = 1000000
estimated_pi = calculate_pi(iterations)
def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n - 1)
def power(x, n):
    if n == 0:
        return 1
    else:
        return x * power(x, n - 1)
def sin(x):
    # 使用泰勒级数展开计算sin(x),这里只计算到第5项
    x = x % (2 * estimated_pi)  # 将x限制在[0, 2π]范围内
    sum_sin = 0
    for i in range(5):
        term = power(-1, i) * power(x, 2 * i + 1) / factorial(2 * i + 1)
        sum_sin += term
    return sum_sin
def polygon_approximation(n):
    # 计算正n边形的边长
    side_length = 2 * sin(estimated_pi / n)  # 使用π的近似值
    return side_length
def estimate_pi(precision=0.000001):
    n = 10000  # 初始多边形边数,可以选择其他正多边形
    while True:
        current_side_length = polygon_approximation(n)
        next_side_length = polygon_approximation(n + 1)
        if abs(next_side_length - current_side_length) < precision:
            break
        n += 1
    return n * current_side_length / 2
print("Pi:", round(estimate_pi(),5))

这段代码的目的是通过计算正多边形的边长来估算π的值。首先,它定义了一个名为`calculate_pi`的函数,该函数使用莱布尼茨级数来计算π的近似值。然后,它定义了一些辅助函数,如`factorial`、`power`和`sin`,这些函数用于计算泰勒级数展开式中的项和其他数学运算。

接下来,它定义了一个名为`polygon_approximation`的函数,该函数计算正n边形的边长。最后,它定义了一个名为`estimate_pi`的函数,该函数通过不断增加正多边形的边数,直到相邻边长的差小于给定的精度阈值,来估算π的值。

最后一行代码打印出估算出的π值,保留5位小数。


http://www.ppmy.cn/news/1536794.html

相关文章

Netty:高性能异步网络编程框架全解析

Netty作为一个基于Java NIO技术的开源异步事件驱动网络编程框架,已经成为开发高性能、高可靠性网络应用的首选工具之一。本文将全面介绍Netty的核心特性、架构原理以及使用方法,帮助你快速掌握这个强大的框架。 Netty的主要特点 异步事件驱动模型 Netty采用异步非阻塞的IO模型…

彩虹易支付最新版源码及安装教程(修复BUG+新增加订单投诉功能)

该源码当前版本为较新的版本&#xff0c;新增了订单投诉功能和一套精美的二次元模板。 此版本为全开源版本&#xff0c;所有文件均未加密。系统默认安装完成后无法直接打开&#xff0c;需要进一步配置。 本站特别针对BUG文件进行了修复&#xff0c;且在PHP7.4环境下表现良好。…

Redis篇(Redis原理 - 网络模型)

目录 一、用户空间和内核态空间 二、阻塞IO 三、非阻塞IO 四、IO多路复用 五、IO多路复用-select方式 六、IO多路复用模型-poll模式 七、IO多路复用模型-epoll函数 八、网络模型-epoll中的ET和LT 九、网络模型-基于epoll的服务器端流程 十、网络模型-信号驱动 异步IO…

C语言 | Leetcode C语言题解之第452题用最少数量的箭引爆气球

题目&#xff1a; 题解&#xff1a; int cmp(void* _a, void* _b) {int *a *(int**)_a, *b *(int**)_b;return a[1] < b[1] ? -1 : 1; }int findMinArrowShots(int** points, int pointsSize, int* pointsColSize) {if (!pointsSize) {return 0;}qsort(points, pointsSi…

Kotlin:2.0.0 的新特性

一、概述 kotlin 2.0.0版本英文官方文档 The Kotlin 2.0.0 release is out and the new Kotlin K2 compiler is Stable! Additionally, here are some other highlights: Kotlin 2.0.0发布了&#xff0c;新的Kotlin K2编译器已经稳定了。此外&#xff0c;以下是其他一些亮点: …

STM32中断——外部中断

目录 一、概述 二、外部中断&#xff08;Extern Interrupt简称EXTI&#xff09; 三、实例-对射式红外传感器 1、配置中断&#xff1a; 2 、完整代码 一、概述 中断&#xff1a;在主程序运行过程中&#xff0c;出现了特定的中断触发条件(中断源)&#xff0c;使得CPU暂停当…

uni-app之旅-day03-搜索

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 5. 搜索5.0 创建 search 分支5.1 自定义搜索组件5.1.2 my-search.vue组件通过自定义属性增强组件的通用性5.1.3 为自定义组件封装 click 事件 5.2 搜索建议5.2.1 渲…

Hugging face简要介绍

1.注册使用huggingface 2.在Datasets下可以查看数据集 3.在Models下可以查看模型&#xff0c;左侧是对模型的分类 4.官方文档查看https://huggingface.co/docs 5.主要模型&#xff1a; 自回归&#xff1a;GPT、Transformer-XL、XLNet 自编码&#xff1a;BERT、ALBERT、RoBERT…