我该如何弄清楚这句话的确切含义?

时间:2016-12-09 14:25:40

标签: python python-3.x math floating-point

There是内置函数divmod()的令人困惑的描述,我在下面发帖:

  

如果x非常接近y的精确整数倍,则由于四舍五入,x // y可能比(x-x%y)// y大1。在这种情况下,Python返回后一个结果,以保持divmod(x,y)[0] * y + x%y非常接近x。

根据身份x//y

(x-x%y)//y应该等于x == (x//y)*y。我想知道在舍入发生时x//y如何大于(x-x%y)//y。< / p>

1 个答案:

答案 0 :(得分:0)

作为一个快速的“例子”来探索这个角落案例,在一个空闲的 shell 中,我输入: x,y=1.0,0.1

然后: x/y;x//y;x%y;x-x%y;(x-x%y)//y;x//y==(x-x%y)//y

对于大多数是 y 倍数的 x 值,最终结果是 True(例如,对于 x == 0.1 到 0.9),但在 x == 1.0 的情况下,它是 {{1 }}。

False

x,y=0.9,0.1

9.0 8.0 0.09999999999999998 0.8 8.0 True

x,y = 1.0,0.1