我知道 Python//
向负无穷大转变,在 C + + /
中是截断的,向0转变。
以下是我目前所知道的:
|remainder|
-12 / 10 = -1, - 2 // C++
-12 // 10 = -2, + 8 # Python
12 / -10 = -1, 2 // C++
12 // -10 = -2, - 8 # Python
12 / 10 = 1, 2 // Both
12 // 10 = 1, 2
-12 / -10 = 1, - 2 // Both
= 2, + 8
C++:
1. m%(-n) == m%n
2. -m%n == -(m%n)
3. (m/n)*n + m%n == m
Python:
1. m%(-n) == -8 == -(-m%n)
2. (m//n)*n + m%n == m
但是为什么 Python //
选择向负无穷的方向舍入呢?我没有找到任何资源来解释这一点,只是找到和听到人们含糊地说: “因为数学原因”。
例如,在 为什么 -1/2在 C + + 中被评估为0,而在 Python 中被评估为 -1中:
抽象地处理这些事情的人往往会有这样的感觉 四舍五入到负无穷大更有意义(< strong > 意思是它的 与数学中定义的模函数相一致 比% 有一些有趣的意思要好
但是我不认为 C + + 的 /
与模函数不兼容,在 C + + 中,(m/n)*n + m%n == m
也适用。
那么 Python 选择舍入到负无穷大背后的(数学)原因是什么呢?