![]() |
1
196
这个 Monte Carlo method 如前所述,应用了一些伟大的概念,但显然,它不是最快的,不是一个远射,不是任何合理的措施。而且,这一切都取决于你在寻找什么样的准确度。我所知道的最快的数字是硬编码的。看着 Pi 和 Pi[PDF] 有很多公式。 这里有一种方法,每次迭代可快速收敛约14位数字。 PiFast 是当前速度最快的应用程序,将此公式与FFT一起使用。我只写公式,因为代码很简单。这个公式几乎是由 Ramanujan and discovered by Chudnovsky . 这实际上是他如何计算出这个数字的几十亿位,所以这不是一个可以忽略的方法。这个公式会很快溢出,因为我们在除阶乘,所以延迟计算以删除项是有利的。
哪里,
下面是 BrentâSalamin algorithm . 维基百科提到 一 和 乙 那么“足够近了” (a+b)/4t 将是的近似值。我不知道“足够接近”是什么意思,但是从我的测试来看,一次迭代有两位数,两个得到7,三个得到15,当然这是双精度的,所以根据它的表示和 真 计算可能更准确。
最后,来点皮球(800位)怎么样?160个字!
|
![]() |
2
110
我真的很喜欢这个程序,因为它通过观察自己的区域来近似。 IOCC 1988: westley.c
|
![]() |
3
76
这是我高中时学过的一种计算圆周率的方法的一般描述。 我只分享这一点,因为我认为它足够简单,任何人都可以无限期地记住它,而且它教给你“蒙特卡洛”方法的概念——这是获得答案的统计方法,似乎不能立即通过随机过程推导出来。 画一个正方形,在这个正方形内刻一个象限(半圆形的四分之一)(半径等于正方形边的一个象限,因此它尽可能地填充正方形) 现在把飞镖扔到广场上,记录它落在哪里——也就是说,在广场内的任何地方选择一个随机点。当然,它降落在正方形内,但它是在半圆形内吗?记录下这个事实。 重复这个过程很多次——你会发现半圆形内的点数与抛出的总数之比,称之为x。 因为正方形的面积是r乘以r,你可以推断出半圆形的面积是x乘以r乘以r(即x乘以r的平方)。因此x乘以4会得到π。 这不是一个快速使用的方法。但这是蒙特卡罗方法的一个很好的例子。如果你环顾四周,你可能会发现许多问题,否则你的计算能力之外的许多问题,可以通过这些方法来解决。 |
![]() |
4
54
为了实现完整性,C++模板版本,对于优化的构建,将在编译时计算PI的近似值,并将内联到单个值。
注意:对于I>10,优化的构建速度可能很慢,对于非优化的运行也是如此。对于12个迭代,我相信有大约80k个对value()的调用(在没有Memoisation的情况下)。 |
![]() |
5
42
实际上有一整本书都致力于 快速的 Jonathan和Peter Borwein的“pi和agm”的计算方法( available on Amazon ) 我研究了很多AGM和相关的算法:它很有趣(尽管有时很重要)。 注意,要实现大多数现代算法来计算\pi,您需要一个多精度算法库( GMP 是个不错的选择,虽然我上次使用它已经有一段时间了)。 最佳算法的时间复杂度以o(m(n)log(n))表示,其中m(n)是使用基于fft的算法将两个n位整数(m(n)=o(n)log(n))相乘的时间复杂度,这通常是在计算\pi的位数时需要的,并且这种算法在gmp中实现。 请注意,尽管算法背后的数学可能并不简单,但算法本身通常是几行伪代码,它们的实现通常非常简单(如果您选择不编写自己的多精度算法:-)。 |
![]() |
6
40
以下答案 准确地说,如何以尽可能快的方式做到这一点——用最少的计算工作量 . 即使你不喜欢这个答案,你也必须承认它确实是获得π值的最快方法。 这个 最快的 获取pi值的方法是: 1)选择您最喜欢的编程语言 2)加载其数学库 3)并且发现pi已经在那里定义了——准备好使用了! 万一你手头没有数学图书馆…… 这个 第二快 方法(更普遍的解决方案)是: 在Internet上查找pi,例如: http://www.eveandersson.com/pi/digits/1000000 (100万位)你的浮点精度是多少?) 或在这里: http://3.141592653589793238462643383279502884197169399375105820974944592.com/ 或在这里: http://en.wikipedia.org/wiki/Pi 无论您想使用什么精度的算术,找到所需的数字都是非常快的,通过定义一个常量,您可以确保不会浪费宝贵的CPU时间。 这不仅是一个部分幽默的答案,而且在现实中,如果有人继续计算π在实际应用中的价值的话。那将是对CPU时间的极大浪费,不是吗?至少我没有看到一个真正的应用程序试图重新计算这个。 尊敬的主持人:请注意,OP要求:“获取pi值的最快方法” |
![]() |
7
26
这个 BBP formula 允许您以2(或16)为基数计算第n个数字,而不必先考虑前面的n-1个数字:) |
![]() |
8
22
我不把π定义为常量,而是使用
|
![]() |
9
21
|
![]() |
10
21
如果 this article 是真的,那么 algorithm that Bellard 创造可能是最快的。他用台式电脑创造了2.7万亿个圆周率! …他已经发表了他的 work here 干得好,贝拉德,你是个先锋! |
![]() |
11
20
这是一个“经典”的方法,非常容易实现。 这个实现是用Python(不是很快的语言)实现的:
你可以找到更多的信息 here . 无论如何,在python中获得精确的pi值的最快方法是:
下面是gmpy pi方法的源代码,我认为在这种情况下,代码没有注释那么有用:
编辑: 我对剪切粘贴和识别有点问题,不管怎样你都能找到来源。 here . |
![]() |
12
19
如果说“最快”是指输入代码最快,那么下面是 golfscript 解决方案:
|
![]() |
13
17
使用类似机器的公式
在方案中实现,例如:
|
![]() |
14
16
如果你愿意使用近似值,
|
![]() |
15
15
双打:
这将精确到小数点后14位,足以填充一个双精度(不精确可能是因为弧切线中的其余小数被截断)。 还有塞思,是3.14159265358979323846 三 不是64。 |
![]() |
16
15
用d计算编译时的pi。(抄袭) DSource.org )
|
![]() |
17
15
圆周率正好是3![弗里克教授(辛普森一家)] 开玩笑,但这里有一个C(.NET框架是必需的)。
|
![]() |
18
13
这个版本(在Delphi中)没有什么特别的,但它至少比 the version Nick Hodge posted on his blog :)在我的机器上,大约需要16秒来进行10亿次迭代,得到的值为 三点一四一五九二六五 25879(准确部分用粗体表示)。
|
![]() |
19
12
在过去的日子里,我们使用小单词大小和缓慢或不存在的浮点运算,我们经常这样做:
对于不需要太高精度的应用程序(例如,视频游戏),这是非常快的,并且足够精确。 |
![]() |
20
12
|
![]() |
21
11
上面克里斯发布的布伦特方法非常好;布伦特通常是任意精度算术领域的巨人。 如果你只想要第n个数字,著名的 BBP formula 十六进制有用 |
![]() |
22
1
从圆面积计算:—)
|
![]() |
23
0
更好的方法获取标准常量的输出,例如 圆周率 或者是标准概念,我们首先应该使用内置方法,即您使用的语言。它将以最快和最好的方式返回值。我正在使用python获取获取值pi的最快方法
马蒂皮皮耶
使用Linux的时间实用程序运行脚本
输出:
阿克苏派
使用Linux的时间实用程序运行脚本
输出:
BBPIPI.Py
使用Linux的时间实用程序运行脚本
输出:
所以最好的方法是使用语言提供的内置方法,因为它们是获得输出的最快和最好的方法。在python中使用math.pi |
![]() |
danial · 如何在多个字符串的每个位置找到最频繁的字符 2 年前 |
![]() |
Manny · 如何比较Perl中的字符串? 2 年前 |
![]() |
Diret · 获取范围内每个数字的子倍数的算法 2 年前 |
![]() |
Saif · 排序时python如何决定何时调用比较器? 2 年前 |