平方根浮点错误

时间:2015-04-24 21:37:46

标签: python math floating-point square-root

我创建了一个非常简单的平方根程序,它会在使用浮点数时立即打印elif b > x的响应。但是,如果我只使用整数它可以工作(但这意味着我找不到9.61的平方根)。

以下是该计划:

x = float(raw_input("What is the number?  "))
a = 1.0
b = a*a
while True:
    if b == x:
        print "The answer is", a
        break
    elif b > x:
        #print "a = ",a
        #print "x = ",x
        print "That is beyond my computing power. Sorry."
        break
    elif b < x:
        a = a + 0.1
        b = a*a
        continue

1 个答案:

答案 0 :(得分:2)

您的问题是检查floating point equality

循环的最后一次迭代是将3.1 * 3.1与9.61进行比较,并且(......的浮点表示)3.1 * 3.1大于9.61,这会以“超出我的计算能力”终止你的循环。

>>> 3.1 * 3.1 == 9.61
False

>>> 3.1 * 3.1 > 9.61
True

>>> 3.1 * 3.1
9.6100000000000001

如果要比较这样的浮点数,请检查它们之间的差异是否足够小(epsilon),而不是检查是否相等。

如果您想探索更多数字方法进行根查找,请阅读Newton-Raphson method上的维基百科文章。

(注意:一些有理数可以用浮点数表示,所以你的循环可能会找到3.61的平方根。)