为什么erlang重新定义了一些基本的余数?

问题描述:

我们所有的数学书籍都告诉我们,余数总是正数。维基告诉我,余数可以是最小正余数或最小绝对余数。这是一个非常基本的概念,对于很多人(包括我)来说很难忘记。当程序员使用多种语言时,可能会导致出现奇怪的错误。为什么erlang重新定义了一些基本的余数?

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

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

这个结果并不符合任何最小正剩余时间或最小绝对剩余概念。

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

+2

计算机科学家不是数学家,他们都有完全不同的态度。 erlang语言设计师可能觉得这更实用。 – 2014-12-05 08:31:05

这是因为整数除法朝着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,并且%将是模数运算符。现在它只是该部门的其余部分。