10/3.3 = 3.03 floor(3.03) = 3 在python里也是3 minqidev 发表于 2022-12-09 15:27
10/3.3333333 = 3.0000000001 floor(3.00000000001) = 3 在python里也是3 minqidev 发表于 2022-12-09 15:27
那第一个 // 操作,不是通常称为 “floor division” 吗? microsat 发表于 2022-12-09 15:29
是两个//啊, 这样你就能理解了把。 有一个operator优先级得。 即使你是有括号,可能经过某些优化,计算得结果就是10/3.3333333, 也有可能是 10/3.333334。 编译器里面有种移位计算,比如左移两位,右移两位,其实就是值不变, 10/(10/3) 相当于乘以10再除以10,所以编译器优化过得话,可以快速得出结果。 其实是 10//3.33334 minqidev 发表于 2022-12-09 15:33
为何floor(10/(10/3))就没有这个问题呢? microsat 发表于 2022-12-09 15:43
楼主你学的怎么样啦。dngdnhxqs 发表于 2022-12-09 16:05
你是不是用的 Python3? 你分解开来看, 10/3 = 3.333333335. 之所以是3.3333335 而不是3.3333333,是因为需要能够把数值用binary表达。 然后10//3.3333335 = 2 大喜妞 发表于 2022-12-10 21:36
而不是等于3
然而,floor(10 / (10/3)) = 3
这个//操作不是叫做floor division吗?
在python里也是3
那第一个 // 操作,不是通常称为 “floor division” 吗?
注意是两个斜杠。不是一个斜杠。
是两个//啊, 这样你就能理解了把。 有一个operator优先级得。 即使你是有括号,可能经过某些优化,计算得结果就是10/3.3333333, 也有可能是 10/3.333334。 编译器里面有种移位计算,比如左移两位,右移两位,其实就是值不变, 10/(10/3) 相当于乘以10再除以10,所以编译器优化过得话,可以快速得出结果。
对于编译器来说,张这个样
其实是 10//3.33334
为何floor(10/(10/3))就没有这个问题呢?
计算器就是两种队列,下面只是大概介绍,没时间完全写对,自己去理解把 floor(10.(10/3)) 对于程序来说长这个样, 第【1】【2】可以快速消掉 计算队列: [1] / [2] x [3] / [4] floor 数字队列 [1] 10 [2] 10 [3] 3 [4] last result
10//(10/3), 这里的 【1】【2】,因为 // 和 x 不是相反计算,不能直接快速消掉 计算队列: [1] // [2] x [3] / [4] floor 数字队列 [1] 10 [2] 10 [3] 3 [4] last result
世界的每一秒都在发生翻天覆地的变化。
你学的越多,你越发现你离世界的最前沿越远。
理论上应该是python 存储的10/3 as a float number 稍微比10/3 as a fraction 稍微大点,导致去除10时结果稍微比3小一点,然后floor就是2了。
这个是真马工。 哈哈。