Python是如何计算数字的?

2 投票
4 回答
2589 浏览
提问于 2025-04-15 11:58

可能是重复的问题:
python - 浮点数的小数位问题

在 [4]: 52 + 121.2

输出 [4]: 173.19999999999999

4 个回答

7

试试这个:

>>> from decimal import Decimal
>>> Decimal("52") + Decimal("121.2")
Decimal("173.2")
8

如果你知道“十三点二”这个数字在十进制中写作“13.2”,是因为它可以分解成“10^1 * 1 + 10^0 * 3 + 10^-1 * 2”,那么试着用二进制来表示数字173.2吧。

首先来看整数部分: (1 * 2^7) + (0 * 2^6) + (1 * 2^5) + (0 * 2^4) + (1 * 2^3) + (1 * 2^2) + (0 * 2^1) + (0 * 2^0)

接下来是小数部分的开始: (0 * 2^-1) + (0 * 2^-2) + (1 * 2^-3)

这个结果是0.125,但这还没有达到0.2,所以我们需要继续加一些形如(1 * 2^-n)的项。我们可以继续加(1 * 2^-4) + (1 * 2^-7),这样我们就能更接近0.1953125,但无论我们加多久,都无法得到0.2,因为0.2不能用这些形如(1 * 2^-n)的数相加来表示。

另外,看看.9999… = 1.0(http://en.wikipedia.org/wiki/0.999..

22

简短回答:Python 对浮点数使用的是二进制运算,而不是十进制运算。十进制的小数在二进制中不能完全准确地表示。

详细回答:每个计算机科学家都应该知道的浮点运算知识

撰写回答