Python是如何计算数字的?
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 对浮点数使用的是二进制运算,而不是十进制运算。十进制的小数在二进制中不能完全准确地表示。
详细回答:每个计算机科学家都应该知道的浮点运算知识