乘法中变量中的Python负值

时间:2018-01-23 15:15:43

标签: python variables negative-number

我正在从Guttag的书中编写一个程序,专门改变第33页的代码来处理负数。该程序试图通过使用二分搜索来找到数字的平方根。

我的问题简而言之:

>>> print(ans)
-12.0
>>> print(ans**2)
144.0
>>> print(-12**2)
-144
>>> -12.0**2
-144.0

将一个数字(在这种情况下为-12)平方给出了我在将IDLE作为数字输入时所期望的正确答案。然而,当它来自一个变量时,它突然转为正面。知道为什么会这样,以及如何解决它?

我的问题在较长的版本中,以防我也理解其他错误:

x = float(input("Enter an integer, which square root you want to find: "))
epsilon = 0.01
numGuesses = 0
low = min(0.0, x)
high = max(1.0, x)
ans = (high + low)/2.0
while abs(ans**2 - x) >= epsilon:
    print("low =", low, "high =", high, "ans =", ans)
    numGuesses += 1
    if (ans**2) < x:
        low = ans
    else:
        high = ans
    ans = (high + low)/2.0
print("Number of guesses =", numGuesses)
print(ans, "is close to square root of", x)

因此,while循环决定是将变量ans分配给高还是低,如果从头开始使用负数,则不能这样做。例如,如果我使用x = -25运行此程序,它将打印出以下内容:

Enter an integer, which square root you want to find: -25
low = -25.0 high = 1.0 ans = -12.0
low = -25.0 high = -12.0 ans = -18.5

虽然ans(-12)的平方应该是-144,这会将其分配给“低”而不是高,并使程序工作。

所有建议都表示赞赏。

1 个答案:

答案 0 :(得分:1)

当您评估-12**2时,您实际上正在评估-(12**2)

而且,( - 12)平方总是144。

如果您想使用-(12**2)保留标志。如果您不希望保留该代码,请使用(-12)**2

如果您正在尝试评估负数的平方根。它将与正数的sqrt乘以虚数i

相同

只需像对正数一样评估负数,然后将i追加到它。

在您的特定情况下,当您评估负数时,min功能会搞砸了