我们所有的数学书籍都在教导我们,余数总是正数。 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,而%将是模数运算符。目前,这只是该部门的剩余部分。

07-24 09:45
查看更多