在这种情况下,两个输入都是radius= 5:
radius = float(input("Enter the radius: "))
circle = 3.1416*radius**2
print(circle)输出为78.53999999999999
第二个是:
radius = float(input("Enter the radius: "))
circle = 3.1416*radius*radius
print(circle)输出为78.54
发布于 2021-10-18 13:45:40
在第一种情况下,5 ** 2首先计算为精确整数25,然后乘以3.1416以获得精确乘积的浮点近似值。
在第二种情况下,首先计算3.1416 * 5以获得浮点近似,然后再乘以5以获得第二近似。由于float的性质,不能保证这两个值是相同的。
换句话说,浮点乘法不是结合性的。不能保证(x * y) * y等于x * (y * y)。
(浮点乘法本身不一定是重复加法,因为没有特殊情况来检查其中一个操作数是否为整数,或者它是哪一个。您可以将3.1416加到自身5次,但是将5加3.1416次是没有意义的。)
发布于 2021-10-18 13:45:22
不同之处在于,在第一个代码中执行的是3.1416*(radius*radius),在第二个代码中执行的是(3.1416*radius)*radius。
**的优先级高于*,因此在x * y ** 2中,首先评估y**2。但在x * y * y中,这些运算符具有相同的优先级,因此它们是从左到右计算的。
顺便说一句,在math.pi上有一个更精确的pi常数。
https://stackoverflow.com/questions/69617168
复制相似问题