我正在阅读 C ++ Primer 5th 。说到%运算符,我对结果 -21%4 = -1 感到困惑。
首先,我做了一些研究,发现我们常用的是数论中的 Euclidean division ,它需要余数 r> 0 。因此,Python和C ++都不是以这种方式实现的。只要商和余数是唯一的,他们就会使用别的东西,这很好。
然后我发现在python2.7 -21 / 4 = -6 ,而 - (21/4)= - 5 ,{{1但是在python3中,它给出了浮点数而没有舍入,因此它是-21/4==-(21/4) //False
。因此我注意到py2.7向负无穷大四舍五入,而C ++向0舍入。然后我提出了这个推论:
我们有 int - >需要舍入规则才能完全划分:
所以我认为不同的舍入规则会导致余数的不同结果,这是真的吗?如果这是真的,那么为什么我们首先要将四舍五入为负无穷设计呢? (因为它会导致True
)的问题。它是某种历史问题还是其他?
我不认为这是一个重复的问题。我读过旧帖子。但似乎原因和结果是舍入规则决定了不同的结果,我问的问题是否属实。为什么python2.7向负无穷大方向转,我认为这是一个糟糕的选择。
答案 0 :(得分:0)
在C ++ 11之前,如果其中一个参数为负数,则余数运算符%
的行为是实现定义的。
从那时起,如果第一个参数为负,结果必须最接近的负数为零。
数学表亲 - 模数 - 会将-21
模4
设为3
。 C ++标准所坚持的是,数学结果从中减去4
以返回所需的负数。