关于整除和取余在各种语言中的不同表现汇总
在数学中
被除数 = 除数 × 商 + 余数
数学中的定义,整除取整没有歧义,为a/b的向下取整运算,对应的余数将与除数相同,注意,严格按照此公式,余数可以为负数,这与我们小学学到的并不相同。
然而在各种计算机语言中,并没有语言严格遵守以上约定
在C 中遵循一个规律,余数符号与被除数一致,除法取整时,是朝着靠近0的方向取整。大多数的语言也与c 保持一致 ,诸如C++,java,swift,Objective-C等,
可以看到结果与上面结论一样,然后使用公式
被除数 = 除数 × 商 + 余数;发现等式成立。
在Dart 语言中,
遵循除法取整时,是朝着靠近0的方向取整,且余数总为非负整数。
故而以上的结果为
这样结果就不在满足以上等式。可能Dart的设计者坚信,余数为非负整数,看来余数为非负整数这一错误观念深入人心。
在JS 中,取消了整除的概念,自行使用取整函数,取余函数与大多数语言一样与C保持一致,余数符号与被除数一致。
可见大部分语言在设计的时候,并没有参照严格的数学公式而是参照了C语言的设计,而C在设计时,考虑到余数符号与除数一致的想法总是违背了普通人的直觉,随着数学水平的提高,余数符号与除数一致,向下取整更容易被人接受。
目前发现遵从严格数学定义的是Python语言
Python语言中
余数符号与除数一致,除法取整时,向下取整来实现的
故而以上的正确结果应该为