首页 / 知识
如何在C#中计算PI?
2023-04-13 22:15:00
How do I calculate PI in C#?如何使用C#计算PI的值? 我以为它会通过一个递归函数,如果是这样,它会是什么样子,是否有任何数学公式支持它? 我对性能不太挑剔,主要是从学习的角度来看如何进行。 如果你想要递归:
经过一些改写后,这将成为:
与F(i):
Isaac Newton(你之前可能听说过他;))想出了这个伎俩。 如何使用:
如果你想要更好的精度,你需要使用算法系统和Decimal类型。 如果你仔细看看这个非常好的指南: 并行编程模式:使用.NET Framework理解和应用并行模式4 你可以在这个可爱的实现中找到(我身边的一些细微变化):
有几个非常非常古老的技巧,我很惊讶在这里看不到。
atan(1)== PI / 4,所以当一个值得信赖的反正切函数时,它是一个老栗子
一个非常可爱,固定比率的估计,使旧西部22/7看起来像泥土 355/113也容易记忆(对于某些人来说):计算一,三,三,五,五,并记住你在命名分子和分子中的数字(如果你忘了哪个三元组去最重要的是,一微秒的想法通常会把它弄清楚)。 请注意,22/7为您提供:3.14285714,这在千分之一是错误的。 355/113给你3.14159292,直到百万分之一没有错。
加。到我的盒子上的/usr/include/math.h,M_PI#define'd as:
从估算PI中得到的教训是,有很多方法可以做到, 355/113是一个古老的中国估计,我相信它在多年前的22/7之前。当我还是一名本科生时,它是由一位物理教授教给我的。 不同算法的良好概述:
我不确定第一个链接中Gauss-Legendre-Salamin算法的复杂性(我说O(N log ^ 2(N)log(log(N))))。 我鼓励你尝试一下,但收敛速度非常快。 另外,我不确定为什么尝试将一个非常简单的程序算法转换为递归算法? 请注意,如果您对性能感兴趣,那么以有限精度(通常需要'double','float',...输出)工作并不真正有意义,因为在这种情况下明显的答案就是硬编码值。 这是一篇关于在C#中计算PI的文章: http://www.boyet.com/Articles/PiCalculator.html 什么是PI?圆的周长除以其直径。
在计算机图形学中,你可以从初始点x,y绘制/绘制一个圆心,其中心位于0,0,可以使用一个简单的公式找到下一个点x',y': h通常是2的幂,因此可以通过移位(或从双指数中减去)来轻松完成除法。 h也想成为你圈子的半径r。一个简单的起始点是x = r,y = 0,然后计算c直到x <= 0的步数,以绘制一个圆的四分之一。 PI为4 * c / r或PI为4 * c / h 递归到任何深度,对于商业程序来说通常是不切实际的,但尾递归允许递归地表达算法,同时实现为循环。递归搜索算法有时可以使用队列而不是进程的堆栈来实现,搜索必须从deadend回溯并采用另一条路径 - 这些回溯点可以放入队列,多个进程可以对点进行排队并尝试其他路径。
计算如下:
你有Pi !!! 这是我所知道的最简单的方法。 PI的值慢慢收敛到Pi的实际值(3.141592165 ......)。如果迭代次数越多越好。 这是一个很好的方法(来自维基百科的主要条目);它比上面讨论的简单公式收敛得快得多,并且如果你的意图是将递归作为一种学习练习,它非常适合递归解决方案。 (假设你是在学习经验之后,我没有提供任何实际的代码。) 基本公式与上述相同,但这种方法平均部分和以加速收敛。 定义一个双参数函数pie(h,w),这样:
因此,您探索递归的第一个机会是将"水平"计算编码为"宽度"参数增加("高度"为零)。 然后使用以下公式添加第二个维度:
当然,它仅用于h大于零的值。 这个算法的优点在于,当您浏览逐渐变大的参数所产生的结果时,您可以使用电子表格轻松模拟它以检查代码。当您计算饼图(10,10)时,您将获得pi的近似值,该值足以满足大多数工程目的。
以下链接显示了如何根据其定义作为积分来计算pi常量,可以将其写为求和的极限,这非常有趣:
这是一个很好的方式:
我喜欢这篇论文,它解释了如何根据Arctangent的泰勒级数展开计算π。 本文从简单的假设开始
可以用泰勒级数迭代估计Atan(x)
该文件指出了为什么这不是特别有效,并继续在该技术中进行许多逻辑改进。他们还提供了一个示例程序,它将π计算为几千个数字,包含源代码,包括所需的无限精度数学例程。 关于...
您是否正在尝试学习科学方法?或者生产生产软件?我希望社区认为这是一个有效的问题,而不是挑剔。 在任何一种情况下,我认为编写自己的Pi是一个已解决的问题。德米特里已经展示了'Math.PI'常数。在同一个空间攻击另一个问题!去寻找通用牛顿近似值或光滑的东西。 在任何生产场景中,我都会强迫您查找该值,达到所需的小数点数,并将其存储为您的类可以到达的某个"const"。 (除非你正在编写科学的"Pi"特定软件......) 首先,请注意C#可以使用.NET框架的Math.PI字段: https://msdn.microsoft.com/en-us/library/system.math.pi(v=vs.110).aspx 这里的一个很好的功能是它是一个全精度双,你可以使用,或与计算结果进行比较。该URL的选项卡具有与C ++,F#和Visual Basic类似的常量。 要计算更多位置,可以编写自己的扩展精度代码。一个代码快速且速度合理且易于编程的方法是: Pi = 4 * [4 * arctan(1/5) - arctan(1/239)] 这个公式和许多其他公式,包括一些以惊人的速度收敛的公式,例如每学期50位,都在Wolfram: Wolfram Pi Formulas PI(π)可以通过使用无穷级数来计算。这是两个例子: 格雷戈里 - 莱布尼兹系列:
C#方法:
Nilakantha系列:
C#方法:
两个函数的输入参数 与Gregory-Leibniz系列相比,Nilakantha系列融合得更快。可以使用以下代码测试这些方法:
以下输出显示Nilakantha Series返回六个正确的PI小数,迭代次数为100次,而Gregory-Leibniz Series返回五个正确小数的PI,迭代次数为100次:
我的代码可以在这里测试>> @Thomas Kammeyer: 请注意,Atan(1.0)经常是硬编码的,所以如果你正在调用一个库Atan函数,那么4 * Atan(1.0)并不是真正的'算法'(已经有很多建议确实通过替换Atan(x)来实现它的一系列(或无限产品),然后在x = 1时评估它。 此外,在极少数情况下,您需要pi的精度高于几十位(可以很容易地硬编码!)。我已经研究过数学应用程序,为了计算一些(非常复杂的)数学对象(它是带有整数系数的多项式),我不得不对实数和复数(包括计算pi)进行算术运算,精度高达a几百万位...但这在现实生活中并不常见':) 您可以查找以下示例代码。
|
最新内容
相关内容
linux支持管道的命令?
linux支持管道的命令?,通信,标准,系统,信息,地方,数据,管道,环境,设备,工具,Linux下Grep命令的详细使用方法?查找包含teacher文本的所有行并打linux云计算查看命令?
linux云计算查看命令?,系统,信息,地址,工作,命令,情况,标准,服务,软件,网络,linux常用命令1、linux系统常用操作命令如下:ls:全拼list,功能是列出linux打开计算器命令?
linux打开计算器命令?,密码,电脑,工作,设备,数字,系统,手机,指数,情况,服务,关于Linux的(操作过程中的Linux命令必须完整给出)对Linux操作系统linux命令输出计算?
linux命令输出计算?,标准,地址,工作,信息,系统,命令,软件,数据,文件,控制台,linux借用外部命令expr,实现计算器功能,利用管道,进程1、你得装一linux计算总数命令?
linux计算总数命令?,系统,第一,情况,数据,信息,电脑,命令,百分比,单位,工作,linux下如何统计一个目录下的文件个数以及代码总行数的命令1、在Llinux中计算器命令?
linux中计算器命令?,地址,数据,位置,网络,设备,时间,环境,平台,软件,命令,说说常用的UNIX命令?命令:whoami格式:whoami功能:显示出当前终端上使用linux性能测试命令?
linux性能测试命令?,数据,系统,工具,标准,设备,地址,情况,基础,网络,环境,如何排除linux系统的读写缓存进行磁盘性能测试chkdsk。chkdsk的全称linux退出计算器命令?
linux退出计算器命令?,工作,地址,系统,命令,通信,信息,电脑,目录,路径,操作,基本linux命令1、linux系统常用操作命令如下:ls:全拼list,功能是列出重启计算机linux命令?
重启计算机linux命令?,系统,设备,工作,标准,名称,命令,状态,数据,服务,提示,Linux的重启命令有哪些linux重启命令有五个,分别如下:shutdown。powlinux计算器打开命令?
linux计算器打开命令?,工作,地址,命令,标准,管理,系统,目录,路径,管道,控制台,基本linux命令1、clear:清空终端屏幕。history:显示已经执行的命linux计算摘要的命令?
linux计算摘要的命令?,数据,网络,数字,密码,工具,名称,正规,标准,代码,文件,linux下怎么生成文件的md5Linux执行shell计算md5值可以通过md5sumlinux命令3d性能?
linux命令3d性能?,系统,工具,实时,百分比,信息,分析,软件,情况,网站,建设,Linux常用性能诊断命令详解1、第二行信息依次为:进程总数、运行中的