为什么erlang重新定义了一些基本的东西?

use*_*221 2 math erlang

我们所有的数学书籍都在教导我们,其余的总是积极的.Wiki告诉我,余数可以是最小正余数或最小绝对余数.这是一个非常基本的概念,对很多人(包括我)来说很难忘掉.当程序员使用多种语言时,它可能会导致奇怪的错误.

erlang重新定义这样一个基本概念的原因是什么?

Eshell V6.2 (abort with ^G) 1> -5 rem 3. -2

该结果与最小正余数或最小绝对余数概念不一致.

http://en.wikipedia.org/wiki/Remainder#Integer_division

Cim*_*ali 5

这是因为整数除法向0舍入.

它发生在许多其他编程语言中,例如,请参阅有关C的答案.


事实上,如果你认为在%操作之前将分裂定义为,那么我们仍然期望
a = (a / b) * b + (a % b).然后自然而然

  • 5/3 = 1,所以5%3 == 2
  • -5/3 = -1,所以5%3 == -2

如果我们舍入-infinity而不是0,那么-5/3将是-2,%将是模数运算符.现在它只是该部门的剩余部分.