负整数的整除和取余运算
计算机 python c/c++ 编程 数学
负整数间是怎么整除和取余数的呢? 数学上貌似没定义,但计算机确实能算。于是就试了试,想总结一下规律。 一不小心发现,C/C++ 和 Python 下的结果是不同的: C/C++ Python 精确值 -14/3 -4 -5 -4.67 -14%3 -2 1 / 14/-3 -4 -5 -4.67 14%-3 2 -1 / -14/-3 4 4 4.67 -14%-3 -2 -2 / 总结规律如下: 两种语言中,商和余数都符合 被除数=商x除数+余数 这一数学规律。 两种语言中,整除的方法不同:C/C++ 是向零取整(负数向上、正数向下取整),Python 是下取整。 以 n/3 和 n%3 为例,看看这两种处理方法的区别。 C 的情况,两种运算结果都关于0对称和反号: n -5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5 商 -1 -1 -1 0 0 0 0 0 1 1 1 余数 -2 -1 0 -2 -1 0 1 2 0 1 2 Python 的情况,运算结果是完全连续的: n -5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5 商 -2 -2 -1 -1 -1 0 0 0 1 1 1 余数 1 2 0 1 2 0 1 2 0 1 2 不知道那种在数学上更好用。个人觉得 Python 的处理方式更优美一些吧。 至于其他语言的处理方法,应该也出不了这两种。我所知道的: C/C++ “向零取整式整除”:C/C++、Java、bash Python “下取整式整除”:Python、Perl、Lua
Page created on 2013-03-30