我们所有的数学书都告诉我们余数总是正数。维基告诉我,余数可以是最小正余数或最小绝对余数。这是一个非常基本的概念,对于很多人(包括我)来说很难忘记。当程序员使用多种语言时,这可能会导致奇怪的错误。
erlang重新定义这样一个基本概念的原因是什么?
Eshell V6.2(使用 ^G 中止)
1> -5 雷姆 3。
-2
这个结果与最小正余数或最小绝对余数概念都不一致。
最佳答案
这是因为整数除法向 0 舍入。
它发生在许多其他编程语言中,例如参见 this answer about C .
事实上,如果您认为除法是在 %
运算之前定义的,那么我们仍然期望 a = (a/b) * b + (a % b)
。那么自然而然
- 5/3 = 1,所以 5 % 3 == 2
- -5/3 = -1,所以 5 % 3 == -2
如果我们向 -无穷大而不是向 0 舍入,那么 -5/3 将是 -2,% 将是模运算符。现在它只是除法的剩余部分。
关于math - 为什么 erlang 重新定义了像余数这样基本的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27311649/