Why modulus operation work different in ruby than other languages?
up vote
1
down vote
favorite
In Ruby, I get:
-5 % 3 # => 1
whereas other languages like PHP, Javascript, C++, and Java all produce the result -2
. I don't understand this concept. I hope someone can explain this ruby's calculation method. It would be better if you could use an example of how it works.
ruby
add a comment |
up vote
1
down vote
favorite
In Ruby, I get:
-5 % 3 # => 1
whereas other languages like PHP, Javascript, C++, and Java all produce the result -2
. I don't understand this concept. I hope someone can explain this ruby's calculation method. It would be better if you could use an example of how it works.
ruby
4
You want-5.remainder(3)
which returns-2
– Stefan
Nov 19 at 16:51
1
AFAIK-5 % 3
is implementation defined in C and C++, that can be either-2
or1
depending on how the CPU implements modulus with negatives and what it thinks "smallest" means:-2
is smaller than1
because-2 < 1
but-2
is bigger than1
because|-2| > |1|
.
– mu is too short
Nov 19 at 23:55
It is a matter of what you want as the set of representatives of the elements derived by modulo. It is whether you think{-2, -1, 0}
more natural or{0, 1, 2}
more natural. Ruby takes the latter, and so do I.
– sawa
Nov 21 at 5:56
add a comment |
up vote
1
down vote
favorite
up vote
1
down vote
favorite
In Ruby, I get:
-5 % 3 # => 1
whereas other languages like PHP, Javascript, C++, and Java all produce the result -2
. I don't understand this concept. I hope someone can explain this ruby's calculation method. It would be better if you could use an example of how it works.
ruby
In Ruby, I get:
-5 % 3 # => 1
whereas other languages like PHP, Javascript, C++, and Java all produce the result -2
. I don't understand this concept. I hope someone can explain this ruby's calculation method. It would be better if you could use an example of how it works.
ruby
ruby
edited Nov 21 at 5:50
sawa
128k27193297
128k27193297
asked Nov 19 at 16:06
Pradhumn Sharma
1116
1116
4
You want-5.remainder(3)
which returns-2
– Stefan
Nov 19 at 16:51
1
AFAIK-5 % 3
is implementation defined in C and C++, that can be either-2
or1
depending on how the CPU implements modulus with negatives and what it thinks "smallest" means:-2
is smaller than1
because-2 < 1
but-2
is bigger than1
because|-2| > |1|
.
– mu is too short
Nov 19 at 23:55
It is a matter of what you want as the set of representatives of the elements derived by modulo. It is whether you think{-2, -1, 0}
more natural or{0, 1, 2}
more natural. Ruby takes the latter, and so do I.
– sawa
Nov 21 at 5:56
add a comment |
4
You want-5.remainder(3)
which returns-2
– Stefan
Nov 19 at 16:51
1
AFAIK-5 % 3
is implementation defined in C and C++, that can be either-2
or1
depending on how the CPU implements modulus with negatives and what it thinks "smallest" means:-2
is smaller than1
because-2 < 1
but-2
is bigger than1
because|-2| > |1|
.
– mu is too short
Nov 19 at 23:55
It is a matter of what you want as the set of representatives of the elements derived by modulo. It is whether you think{-2, -1, 0}
more natural or{0, 1, 2}
more natural. Ruby takes the latter, and so do I.
– sawa
Nov 21 at 5:56
4
4
You want
-5.remainder(3)
which returns -2
– Stefan
Nov 19 at 16:51
You want
-5.remainder(3)
which returns -2
– Stefan
Nov 19 at 16:51
1
1
AFAIK
-5 % 3
is implementation defined in C and C++, that can be either -2
or 1
depending on how the CPU implements modulus with negatives and what it thinks "smallest" means: -2
is smaller than 1
because -2 < 1
but -2
is bigger than 1
because |-2| > |1|
.– mu is too short
Nov 19 at 23:55
AFAIK
-5 % 3
is implementation defined in C and C++, that can be either -2
or 1
depending on how the CPU implements modulus with negatives and what it thinks "smallest" means: -2
is smaller than 1
because -2 < 1
but -2
is bigger than 1
because |-2| > |1|
.– mu is too short
Nov 19 at 23:55
It is a matter of what you want as the set of representatives of the elements derived by modulo. It is whether you think
{-2, -1, 0}
more natural or {0, 1, 2}
more natural. Ruby takes the latter, and so do I.– sawa
Nov 21 at 5:56
It is a matter of what you want as the set of representatives of the elements derived by modulo. It is whether you think
{-2, -1, 0}
more natural or {0, 1, 2}
more natural. Ruby takes the latter, and so do I.– sawa
Nov 21 at 5:56
add a comment |
1 Answer
1
active
oldest
votes
up vote
2
down vote
It's in the docs: https://ruby-doc.org/core-2.5.0/Numeric.html#method-i-divmod
If
q, r = x.divmod(y)
, then
q = floor(x/y)
x = q*y + r
The quotient is rounded toward negative infinity
So q
is -3 (-5 / 2 and round down, as per usual integer division rules). And r = x - q * y = -5 - -3 * 2 = 1
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
2
down vote
It's in the docs: https://ruby-doc.org/core-2.5.0/Numeric.html#method-i-divmod
If
q, r = x.divmod(y)
, then
q = floor(x/y)
x = q*y + r
The quotient is rounded toward negative infinity
So q
is -3 (-5 / 2 and round down, as per usual integer division rules). And r = x - q * y = -5 - -3 * 2 = 1
add a comment |
up vote
2
down vote
It's in the docs: https://ruby-doc.org/core-2.5.0/Numeric.html#method-i-divmod
If
q, r = x.divmod(y)
, then
q = floor(x/y)
x = q*y + r
The quotient is rounded toward negative infinity
So q
is -3 (-5 / 2 and round down, as per usual integer division rules). And r = x - q * y = -5 - -3 * 2 = 1
add a comment |
up vote
2
down vote
up vote
2
down vote
It's in the docs: https://ruby-doc.org/core-2.5.0/Numeric.html#method-i-divmod
If
q, r = x.divmod(y)
, then
q = floor(x/y)
x = q*y + r
The quotient is rounded toward negative infinity
So q
is -3 (-5 / 2 and round down, as per usual integer division rules). And r = x - q * y = -5 - -3 * 2 = 1
It's in the docs: https://ruby-doc.org/core-2.5.0/Numeric.html#method-i-divmod
If
q, r = x.divmod(y)
, then
q = floor(x/y)
x = q*y + r
The quotient is rounded toward negative infinity
So q
is -3 (-5 / 2 and round down, as per usual integer division rules). And r = x - q * y = -5 - -3 * 2 = 1
answered Nov 19 at 16:18
Sergio Tulentsev
177k29286301
177k29286301
add a comment |
add a comment |
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53378554%2fwhy-modulus-operation-work-different-in-ruby-than-other-languages%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
4
You want
-5.remainder(3)
which returns-2
– Stefan
Nov 19 at 16:51
1
AFAIK
-5 % 3
is implementation defined in C and C++, that can be either-2
or1
depending on how the CPU implements modulus with negatives and what it thinks "smallest" means:-2
is smaller than1
because-2 < 1
but-2
is bigger than1
because|-2| > |1|
.– mu is too short
Nov 19 at 23:55
It is a matter of what you want as the set of representatives of the elements derived by modulo. It is whether you think
{-2, -1, 0}
more natural or{0, 1, 2}
more natural. Ruby takes the latter, and so do I.– sawa
Nov 21 at 5:56