你在Erlang如何做模或余数?


Answers

erlang模运算符是rem

Eshell V5.6.4  (abort with ^G)
1> 97 rem 10.
7
Question

我是Erlang的全新品牌。 你如何做模(获得一个部门的其余部分)? 在大多数C语言中它是%,但是在Erlang中指定了一个注释。

有几个人用雷姆回答,在大多数情况下是好的。 但是我正在重新审视这个问题,因为现在我需要使用负数,而rem会给你一个分数的余数,这与负数的模数不一样。




被接受的答案是错误的。

rem行为与现代C中的%运算符完全相同。它使用截断的除法。

对于X <0和Y <0,接受的答案失败。 考虑mod(-5,-3)

C:                     -5 % -3 == -2
rem:                 -5 rem -3 == -2
Y + X rem Y:    -3 + -5 rem -3 == -5 !! wrong !!

模运算器的替代实现使用了地形分割和欧几里德分割。 这些结果是

flooring division:   -5 mod -3 == -2
euclidean division:  -5 mod -3 == 1

所以

Y + X rem Y

不会为X <0和Y <0重现任何模运算符。

rem按预期工作 - 它使用截断分割。




Erlang余数不适用于负数,所以你必须编写自己的负函数参数。







Related