作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
>>> print (12//0.2)
59.0
>>> print(floor(12/0.2))
60
在这种情况下,为什么楼层划分不能按规则进行?
0.2
视为
0.20000000001
所以
floor division
生成
(12/0.2000000001)
和
59.999999...
输出
floor(59.999999999)
但是不知道为什么python在
59
情况下而不是
0.2
情况下将
0.2000000001
视为
floor division
吗?
最佳答案
12 / 0.2
产生60.0的原因不是因为对0.2的处理不同,而是因为浮点除法中的错误抵消了0.2表示中的错误。浮点数始终具有相同的值(大于十进制的0.2),但是根据操作的不同,这些错误将累积或被消除。
在其他情况下,错误不会完全消除,并显示在结果中:
>>> (12 / (0.2 * 0.2)) * 0.2
59.99999999999999
在CPython中,这些特定类型的整数除法(float//自动转换第一个参数后的float)和相对幅度的执行方式如下(有关完整方法,请参见
Python's source code):
mod = a % b
result = (a - mod) / b
如果b实际上为0.2,则
mod
将为0,但在浮点中它会稍大一些,因此
mod
恰好在0.2以下。
>>> a = 12.0
>>> b = 0.2
>>> mod = a % b
>>> mod
0.19999999999999934
>>> (a - mod) / b
59.0
OP还询问浮点除法中的错误,这也是:
12: 1.1000000000000000000000000000000000000000000000000000 * 2^3
0.2: 1.1001100110011001100110011001100110011001100110011010 * 2^(-3)
记住0.2不是真的0.2,而是0.200000000000000011102230246251565404236316680908203125。将12除以> 0.2的结果应为<60。
12 / 0.2: 0.1110111111111111111111111111111111111111111111111111111 * 2^6
但是最后3位不适合加倍,尾数只有53位(包括符号),而我们目前使用的是56位。
normalised: 1.110111111111111111111111111111111111111111111111111111 * 2^5
rounded: 1.1110000000000000000000000000000000000000000000000000 * 2^5
1.1110000000000000000000000000000000000000000000000000000000000000 * 2 ^ 5等于60。
关于python - 楼层划分如何根据文件规定不给出结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64533731/
我有一些地址数据需要解析。除楼层数据外,大多数地址信息都以适合我的方式提供。 对于以不同方式获取的楼层数据,我可能会得到以下格式: “大街 123 号 2 楼”或“大街 123 号 2 楼” 如果我使
我正在使用processing java 库使用牛顿物理学模拟球在两堵墙之间弹跳;水平速度是一个常数,因为没有加速度。我让模拟正常工作,但我想指定地板的高度。然而,在我的方程中,当我尝试在球距离屏幕底
我正在尝试在我的苹果应用程序中显示楼层。我知道在苹果 map 中有一些选定的地方,如机场或购物中心,可以看到这个楼层。我需要做到这一点。只需要显示可用的楼层。正如你在图片中看到的,在图像的右侧有5F,
我是一名优秀的程序员,十分优秀!