最近看书遇到这个问题,查了些资料上 SO 问了一下被 marked duplicated 了。(T_T)来问下前辈们。
先说下我的理解和观察到的现象: 首先我们日常说的带余除法用的是欧几里得带余除法,在 C++和 python 里面都不是这种。 C++里面 m%n 的符号跟 m 相同,python 里面 m%n 符号跟 n 相同。我一开始觉得只是不同 implementation 而已,然后发现好像跟取整的规则有点联系。 py2.7 里似乎是向负无穷取整的
-21/4 == -6
-(21/4) == -5
-21/4 == -(21/4) //False
因为既然定义了 int,那除不尽的时候肯定要设定一个取整规则,那 C++是向 0 取整的,py2.7 似乎是是向负无穷取整的,py3 结果是浮点数没有这个问题。
我的问题是: 1.取整规则跟余数的选择不同是不是一个因果关系? 2.假设 1 成立(其实我心里已经默认是了 T-T ),接着问为什么 py2.7 要搞这个向负无穷取整,搞得-21/4==-(21/4)都不相等了,书上还说
C++语言的早起版本允许结果为负值的商向下或向上取整。 (为什么一开始会是这种设定?)
(看了下 js,没有这个问题,跟 py3 一样是浮点数,但 js 跟 C++一样余数也是跟被除数符号一样的,php 也是)。
stackoverflow 链接
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.