我是新成员,我将直接着手处理它,因为我整个星期天都在尝试理解它。
我是Python的新手,先前学习了C ++编程的基本中级水平(这是一个10周的大学模块)。
我正在尝试几种迭代技术来计算圆周率,但两种方法都略有不准确,我不确定为什么。
第一种方法是我在大学里学到的-我相信你们中的一些人以前已经看过它。
我记得上C++课时,老师告诉我们这个问题很常见,并不是因为数学问题,而是代码中的某些东西导致的,但我记不清具体原因了。可能与随机数生成有关,或者使用浮点数的限制,或者……任何东西都有可能。甚至可能只是我的数学不行……
我是Python的新手,先前学习了C ++编程的基本中级水平(这是一个10周的大学模块)。
我正在尝试几种迭代技术来计算圆周率,但两种方法都略有不准确,我不确定为什么。
第一种方法是我在大学里学到的-我相信你们中的一些人以前已经看过它。
x=0.0
y=0.0
incircle = 0.0
outcircle = 0.0
pi = 0.0
i = 0
while (i<100000):
x = random.uniform(-1,1)
y = random.uniform(-1,1)
if (x*x+y*y<=1):
incircle=incircle+1
else:
outcircle=outcircle+1
i=i+1
pi = (incircle/outcircle)
print pi
这是一个在平面上生成随机(x,y)坐标的生成器,坐标轴范围为-1至+1。如果x ^ 2 + y ^ 2 <= 1,则我们知道该点位于坐标轴形成的正方形内的半径为1的圆内。
根据点的位置,计数器会增加incircle或outcircle的值。
然后,π的值是圆内和圆外的值之比。坐标是随机生成的,因此应该是均匀分布的。
然而,即使在非常高的迭代值下,我的Pi的结果始终在3.65左右。
第二种方法是另一种迭代方法,它计算具有增加边数的多边形的周长,直到多边形几乎成为一个圆形,然后,Pi =周长/直径。(我有点作弊,因为编码中有一个math.cos(Pi)项,所以看起来我正在使用Pi来找到Pi,但这只是因为你不能在Python上轻松地使用度来表示角度)。但即使进行高迭代,最终结果似乎也要在3.20左右,这也是错误的。代码在此处:
S = 0.0
C = 0.0
L = 1.0
n = 2.0
k = 3.0
while (n<2000):
S = 2.0**k
L = L/(2.0*math.cos((math.pi)/(4.0*n)))
C = S*L
n=n+2.0
k=k+1.0
pi = C/math.sqrt(2.0)
print pi
我记得上C++课时,老师告诉我们这个问题很常见,并不是因为数学问题,而是代码中的某些东西导致的,但我记不清具体原因了。可能与随机数生成有关,或者使用浮点数的限制,或者……任何东西都有可能。甚至可能只是我的数学不行……
有人能想到问题出在哪里吗?
太长不看:尝试计算圆周率,无论我做多少次迭代,都不能精确地得到它。
(还有一点——在第二段代码中,有一行写着S=2.0 ** k。如果将“n”设置为2000以上,S的值就会变得太大,导致代码崩溃。我该怎么解决?)
谢谢!
tan(45)
度进行计算时,它返回的结果是0.99999...而不是1。 - Ashwin Guptamath.pi
吗? - Anthony Pham