Python使用割圆法求π值

三国时期刘徽提出的割圆法有多牛掰,看这个:刘徽割圆术到底做了什么? - 知乎

用Python实现的该算法代码如下:

#!/usr/bin/env python
"""使用割圆法计算π值Usage::$ python calc_circle_pi.py 20  # 参数20是迭代次数割圆法的几何描述可参考如下链接:
https://zhuanlan.zhihu.com/p/553830157
https://zhuanlan.zhihu.com/p/340959552
"""import math
import sysdef calc_pi(times: int, *, verbose=False) -> float:"""割圆法求π值:param times: 迭代次数(>=1):param verbose: 是否打印每次迭代的信息"""lines = 6  # 初始边数为6r = length = 1.0  # 边长为1area = (1 * math.sqrt(1**2 - 0.5**2) / 2) * 6  # 面积for i in range(times):lines *= 2  # 边数增加一倍ap = length / 2  # 直角边AP的长度op = math.sqrt(r**2 - ap**2)  # 另一直角边OP的长度pc = r - op  # 新增三角形的短直角边PC的长度length = math.sqrt(ap**2 + pc**2)  # 新多边形的边长ACincr_area = pc * ap / 2  # 新增三角形的面积delta = incr_area * linesarea += deltalow, high = area, area + deltaif verbose:print(f"第{i+1}次迭代,边数为{lines},边长为{length},π值为({low}, {high})")if low == high:if verbose:print("已到精度极限,终止迭代。")breakreturn areadef main() -> None:times = 10if sys.argv[1:]:if (a1 := sys.argv[1]) == "-i":times = int(input("请输入迭代次数:"))elif a1.isdigit():times = int(a1)print(f"{times = }")pi = calc_pi(times, verbose=True)print(f"Got PI: {pi}\n{math.pi=}")if __name__ == "__main__":main()

结果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/671569.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ai写作工具推荐:如何用AI人工智能进行写作

AI写作工具:提升创作效率的秘密武器 在科技日新月异的今天,人工智能(AI)已经渗透到我们生活的方方面面,包括写作。AI写作工具,就是利用人工智能技术,帮助我们进行文本生成、语言优化等工作的工…

第六节课《Lagent AgentLego 智能体应用搭建》

PDF链接:https://pan.baidu.com/s/1JFtvBWgEGFWJq8pHafvIUg?pwd6666 提取码:6666 Lagent & AgentLego 智能体应用搭建_哔哩哔哩_bilibili https://github.com/InternLM/Tutorial/blob/camp2/agent/README.md InternStudio 一、为什么需要agent…

文件加密软件排行榜前四名(2024年4大好用的加密软件推荐)

说到文件加密,想必大家都很熟悉,文件加密已经普遍应用,文件加密是一种重要的安全措施,可以确保数据的机密性、完整性和可用性,降低因数据泄露或丢失带来的风险 。 下面小编给大家分享几款常用的加密软件,…

文件删了,回收站清空了怎么恢复?文件恢复软件一览

在日常生活和工作中,我们常常会遇到误删除文件的情况,有时甚至会因为清空了回收站而无法找回这些文件。这些文件可能包含重要的工作数据、个人照片或其他珍贵的回忆。那么,在这种情况下,我们该如何恢复这些被删除且清空回收站的文…

基于Springboot的家具网站

基于SpringbootVue的家具网站设计与实现 开发语言:Java数据库:MySQL技术:SpringbootMybatis工具:IDEA、Maven、Navicat 系统展示 用户登录 首页 商家 家具信息 家居资讯 后台管理 后台首页 用户管理 商家管理 家具类型管理 家具…

周刊是聪明人筛选优质知识的聪明手段!

这是一个信息过载的时代,也是一个信息匮乏的时代。 这种矛盾的现象在 Python 编程语言上的表现非常明显。 它是常年高居编程语言排行榜的最流行语言之一,在国外发展得如火如荼,开发者、项目、文章、播客、会议活动等相关信息如海如潮。 但…

Qt | QLCDNumber 类(LCD 数字),LCD 表示液晶显示屏

01、上节回顾 Qt 基础教程合集02、QLCDNumber 1、QLCDNumber 类用于显示类似于 LCD 显示屏上的字符(见右图) ​ 2、QLCDNumber 类是 QFrame 类的直接子类,因此 QLCDNumber 以使用从 QFrame 类继承而来的边框效果 3、QLCDNumber 可显示的符号有:0,1,2,3,4,5,6,7,8,…

尊享面试100题(314.二叉树的垂直遍历python)

题目关键词,从左到右,从上到下,那么使用bfs宽度优先算法。 使用字典v保存每一列的值。 class Solution:def verticalOrder(self, root: Optional[TreeNode]) -> List[List[int]]:if not root: return []v defaultdict(list)qu deque()…

Python项目实战,用Python实现2048游戏

目录 写在前言项目介绍项目思路环境搭建项目实现初始化Python类初始化游戏窗口定义游戏棋盘和方块移动和合并游戏主循环 进一步探索 写在前言 hello,大家好,我是一点,专注于Python编程,如果你也对感Python感兴趣,欢迎…

new mars3d.control.MapSplit({实现点击卷帘两侧添加不同图层弹出不同的popup

new mars3d.control.MapSplit({实现点击卷帘两侧添加不同图层弹出不同的popup效果: 左侧: 右侧: 说明:mars3d的3.7.12以上版本才支持该效果。 示例链接: 功能示例(Vue版) | Mars3D三维可视化平台 | 火星科技 相关代…

MTEB - Embedding 模型排行榜

文章目录 关于 MTEBMTEB 任务和数据集概览使用 MTEB Pythont 库Installation使用 关于 MTEB MTEB : Massive Text Embedding Benchmark github : https://github.com/embeddings-benchmark/mtebhuggingface : https://huggingface.co/spaces/mteb/leaderboardpaper : https:/…

Linux驱动开发——(十一)INPUT子系统

目录 一、input子系统简介 二、input驱动API 2.1 input字符设备 2.2 input_dev结构体 2.3 上报输入事件 2.4 input_event结构体 三、代码 3.1 驱动代码 3.2 测试代码 四、平台测试 一、input子系统简介 input子系统是管理输入的子系统,和pinctrl、gpio子…