我们所有的数学书籍都在教导我们,余数总是正数。 Wiki告诉我,余数可以是最小正余数或最小绝对余数。这是一个非常基本的概念,对于很多人(包括我)而言,这是很难理解的。当程序员使用多种语言时,这可能是奇怪的错误的原因。
Erlang重新定义这种基本概念的原因是什么?Eshell V6.2 (abort with ^G)1> -5 rem 3.-2
此结果与最小正余数或最小绝对余数概念均不一致。
http://en.wikipedia.org/wiki/Remainder#Integer_division
最佳答案
这是因为整数除法舍入为0。
它发生在许多其他编程语言中,例如,参见this answer about C。
确实,如果您认为除法是在%
操作之前定义的,那么我们仍然期望a = (a / b) * b + (a % b)
。然后自然而然地
5/3 = 1,所以5%3 == 2
-5 / 3 = -1,所以5%3 == -2
如果我们朝-infinity取整而不是朝0取整,那么-5/3将是-2,而%将是模数运算符。目前,这只是该部门的剩余部分。