Bry*_*nta 13 python floating-point integer-division
在Python 2.7和3.x,为什么整数除法给我一个不正确的数量由数除以时0 < x < 1?
负数-1 < x < 0甚至可以正常工作:
>>> 1//.1
9.0
>>> 1//-.1
-10.0
Run Code Online (Sandbox Code Playgroud)
我理解带负数(或正数)的整数除法向负无穷大舍入,但我认为1//.1应该导致10.0因为1可以除以.1余数.
pok*_*oke 26
你在这里看到的基本上是"正常"划分使用/和地板划分之间差异的影响//.
要记住的一点是,浮点运算的一般问题只是因为它们的工作方式而存在一定的不精确性.在这些情况下,使用该decimal模块检查实际发生的情况总是好的.那么让我们来看看你在这里做了什么:
首先,.1已经不准确了:
>>> Decimal(.1)
Decimal('0.1000000000000000055511151231257827021181583404541015625')
Run Code Online (Sandbox Code Playgroud)
那么,让我们看一下这些部门的实际结果:
>>> Decimal(1) / Decimal(.1)
Decimal('9.999999999999999444888487687')
>>> 1 / .1
10.0
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,正常除法使用/并不能完全为您10提供浮点运算.但它真的很接近.这就是为什么当你使用普通浮点数时,实际上你会回到10(因为在数字类型的不精确中,分裂不精确会立即丢失).
当使用地板分割时,结果在修正不精确之前就会消失,这就是为什么你会得到9:
>>> Decimal(1) // Decimal(.1)
Decimal('9')
>>> 1 / .1
10.0
Run Code Online (Sandbox Code Playgroud)
对于负数,地板效应是相反的方向,如其他问题所述:
>>> Decimal(1) / Decimal(-.1)
Decimal('-9.999999999999999444888487687')
>>> 1 / -.1
-10.0
>>> Decimal(1) // Decimal(-.1)
Decimal('-9')
>>> 1 // -.1
-10.0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1240 次 |
| 最近记录: |