避免循环中零浮点除法 - python

时间:2016-06-28 12:14:39

标签: python-2.7 floating-point divide-by-zero

抱歉,我是一个有点编程的新手,但是我在一个简单的循环中得到一个浮动分区错误,我不知道如何纠正。

这是python 2.7中的代码

import random

N = 100
A = []
p = 0
q = 0

k = 1
while k<=N:
    x = random.random()
    if x<= 0.5:
        p+= 1
    else:
        q+=1
    y = p/q
    A.append(y)
    k+=1

运行此代码会产生零分割错误。我无法纠正。有谁能告诉我如何纠正这个问题?

2 个答案:

答案 0 :(得分:0)

由于此代码

,您将收到零分割错误
if x <= 0.5:
    p+=1
else:
    q+=1
y= p/q

你已经初始化了q = 0,因此当第一次运行while循环时,如果x <= 0.5,那么p将递增,但q将等于零,在下一步中,你将p除以q(这是零)。您需要在执行除法之前设置检查条件,以便分母不为零。您可以通过以下方式纠正它。

if x <= 0.5:
    p+=1
else:
    q+=1
if (q == 0):
    print "Denominator is zero"
else:
    y= p/q

这只是一个解决方案,因为我不知道您在代码中尝试做什么。

答案 1 :(得分:0)

您可以使用numpy.nextafter(q,1)。 这样一来,您可以在q之后的下一个浮点值接近1,这是非常小的数字。