【问题标题】:Square Root of Floats Error浮点数误差的平方根
【发布时间】:2015-04-24 21:37:46
【问题描述】:

我创建了一个非常简单的平方根程序,它会在使用浮点数时立即打印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

【问题讨论】:

  • “不会工作”不是一个技术术语。请添加更多细节,例如预期与实际输出、错误消息等。
  • 换句话说 - 你得到什么错误?
  • 目前,这个问题是题外话,因为它只是问“为什么这段代码不起作用”,而不是提供足够的细节来让这个问题对未来的用户有用。我不会标记它,因为看起来您可以对其进行编辑以澄清。

标签: python math floating-point square-root


【解决方案1】:

您的问题是检查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 的平方根。)

【讨论】:

    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-16
    相关资源
    最近更新 更多