哪个版本的Python默认使用有理算法?

Chr*_*ton 0 python floating-point rational-number python-3.x

如果我在Python 2.7.1 shell或3.3.2 shell中键入以下内容:

a = 0.1
b = 0.1
(a + b) == 0.2
Run Code Online (Sandbox Code Playgroud)

它返回值true.从stackoverflow和麻省理工学院的这个视频,我觉得这会回来false,因为当试图在计算机中准确表示0.1时会出现小错误.(毕竟不是二进制吗?)所以我猜Python必须是a)进行非浮点算术或b)在进行相等性测试之前进行舍入.

它是哪个版本以及哪些版本的Python具有此行为?

Kar*_*ath 6

他们都不是.这是"运气".浮点表示+算术为您选择的数字提供相同的值.

>>> (0.1 + 0.1) == 0.2
True
>>> (0.1 + 0.2) == 0.3
False
Run Code Online (Sandbox Code Playgroud)

您可以使用该decimal模块向您显示:

>>> import decimal
>>> decimal.getcontext().prec = 60
>>> decimal.Decimal(0.1)
Decimal('0.1000000000000000055511151231257827021181583404541015625')
>>> decimal.Decimal(0.2)
Decimal('0.200000000000000011102230246251565404236316680908203125')
>>> decimal.Decimal(0.1) + decimal.Decimal(0.1)
Decimal('0.2000000000000000111022302462515654042363166809082031250')
Run Code Online (Sandbox Code Playgroud)

  • @AmadeusDrZaius,当前版本的Python显示最短的十进制字符串,当读回时,将完全重现浮点数.您输入的许多十进制字符串将逐字回显. (3认同)