首页 > 解决方案 > 两个看似相同的 if 语句之间的区别

问题描述

嗨,我制作了一个脚本来计算直角三角形,作为一种验证方法,我使用了

if a != ((b*b)+(c*c))/a:
    print("Incorrect")

但是,对于大于 134217729、9007199388958720、9007199388958721 的三角形,此方法会产生假阴性。当我将等式更改为

if a**2 != (b**2)+(c**2):
    print("Incorrect")

它停止产生假阴性。那么其中一个起作用而另一个不起作用的原因是什么?我使用以下代码进行测试:

b = 134217729
c = 9007199388958720
a = 9007199388958721

a = ((b*b)+(c*c))/a
print(a)

a = ((b**2)+(c**2))/a
print(a)

n = (b**2)+(c**2)
a = n**(1/2)
print(a)

a = 9007199388958721
if a**2 == (b**2)+(c**2):
    print("Correct")

输出是:

9007199388958720.0
9007199388958722.0
9007199388958722.0
Correct

这是怎么回事???

标签: pythonmath

解决方案


推荐阅读