为什么同一数学语句的乘法和除法的小数点精度不同


# Used "==" and "is" for equality
print(48 / 10 == 48 * 0.1)
print(48 / 10 is 48 * 0.1)
print()
# Check Both Answers Individually
print(f"48 / 10 = {48 / 10}")
print(f"48 * 0.1 = {48 * 0.1}")

在下面的代码中,我认为这两个表达式会相等,但事实并非如此。这就是它的输出。

False
False
48 / 10 = 4.8
48 * 0.1 = 4.800000000000001

有人能解释一下为什么结果会有差异吗,无论你是用除法还是乘法?

即使乘以0.1和除以10在数学上是相等的,但在计算机程序中它们不是。

当你用Python编写0.1时,你得到的不是十分之一。稍微多一点。这里是0.1到40位精度:

>>> "%0.40f" % 0.1
'0.1000000000000000055511151231257827021182'

这种差异是由于浮点数使用二进制表示。你不能用有限数量的二进制数字精确地表示0.1,就像你不能用无限数量的十进制数字精确地表达1/3=0.333333一样。

由于0.1略高于十分之一,因此您应该期望48*0.1略高于4.8。它是:

>>> "%0.40f" % (48*0.1)
'4.8000000000000007105427357601001858711243'

您也不应该期望4.8等于4.8。事实上,它略低于4.8:

>>> "%0.40f" % (4.8)
'4.7999999999999998223643160599749535322189'

最新更新