是整数舍入规则决定%C ++,python3和python2.7之间的操作差异吗?

时间:2017-11-09 10:06:06

标签: c++

我正在阅读 C ++ Primer 5th 。说到%运算符,我对结果 -21%4 = -1 感到困惑。

  1. 首先,我做了一些研究,发现我们常用的是数论中的 Euclidean division ,它需要余数 r> 0 。因此,Python和C ++都不是以这种方式实现的。只要商和余数是唯一的,他们就会使用别的东西,这很好。

  2. 然后我发现在python2.7 -21 / 4 = -6 ,而 - (21/4)= - 5 ,{{1但是在python3中,它给出了浮点数而没有舍入,因此它是-21/4==-(21/4) //False。因此我注意到py2.7向负无穷大四舍五入,而C ++向0舍入。然后我提出了这个推论:

    我们有 int - >需要舍入规则才能完全划分:

    1. 向负无穷大的一些四舍五入 - > (结果)余数的符号与除数相同
    2. 向零舍入一些 - > (结果)r的标志与红利相同
  3. 所以我认为不同的舍入规则会导致余数的不同结果,这是真的吗?如果这是真的,那么为什么我们首先要将四舍五入为负无穷设计呢? (因为它会导致True)的问题。它是某种历史问题还是其他?

    我不认为这是一个重复的问题。我读过旧帖子。但似乎原因和结果是舍入规则决定了不同的结果,我问的问题是否属实。为什么python2.7向负无穷大方向转,我认为这是一个糟糕的选择。

1 个答案:

答案 0 :(得分:0)

在C ++ 11之前,如果其中一个参数为负数,则余数运算符%的行为是实现定义的。

从那时起,如果第一个参数为负,结果必须最接近的负数为零。

数学表亲 - 模数 - 会将-214设为3。 C ++标准所坚持的是,数学结果从中减去4以返回所需的负数。