modulo matlab取商 - 你在Erlang如何做模或余数?





matlab取商取余 matlab整除 (8)


在Erlang中,5个rem 3.给出2,-5个rem 3.给出-2。 如果我理解你的问题,你会想要-5 rem 3.给予1,因为-5 = -2 * 3 + 1。

这是做你想要的吗?

mod(X,Y) when X > 0 -> X rem Y;
mod(X,Y) when X < 0 -> Y + X rem Y;
mod(0,Y) -> 0.

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

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




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




上面的Y + X rem Y似乎是错误的:(Y + X)rem Y或Y +(X rem Y)产生不正确的结果。 例如:让Y = 3。 如果X = -4,则第一个形式返回-1,如果X = -3,则第二个形式返回3,其中没有一个是[0; 3 [。

我用这个来代替:

% Returns the positive remainder of the division of X by Y, in [0;Y[. 
% In Erlang, -5 rem 3 is -2, whereas this function will return 1,  
% since -5 =-2 * 3 + 1.

modulo(X,Y) when X > 0 ->   
   X rem Y;

modulo(X,Y) when X < 0 ->   
    K = (-X div Y)+1,
    PositiveX = X + K*Y,
    PositiveX rem Y;

modulo(0,_Y) -> 
    0.



我使用了以下药剂:

defp mod(x,y) when x > 0, do: rem(x, y);
defp mod(x,y) when x < 0, do: rem(x, y) + y;
defp mod(0,_y), do: 0

请不要低估这个,因为这是另一种语言而不是问题。 我们都生活在这个梦想中,因为我们都有梁。







erlang模运算符是rem

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



mod(A, B) when A > 0 -> A rem B;
mod(A, B) when A < 0 -> mod(A+B, B); 
mod(0, _) -> 0.

% console:
3> my:mod(-13, 5).
2



大多数解释都没有考虑到一个重要的步骤,让我们用另一个例子填补空白。

鉴于以下情况:

Dividend: 16
Divisor: 6

模数函数如下所示:

16 % 6 = 4

让我们来确定这是为什么。

首先,执行整数除法 ,与正常除法类似,除了任何小数(aka余数)被丢弃:

16 / 6 = 2

然后, 上述分割( 2 )的结果与我们的除数6相乘

2 * 6 = 12

最后,从我们的分红16 )中减去上述乘法( 12 )的结果:

16 - 12 = 4

这个减法的结果, 4余数 ,是我们上面的模数的结果!







erlang modulo