4 ms·
In c# -1 % 2 == -1. Doesn't help.
by recursive 4y ago
In c# -1 % 2 == -1. Doesn't help.
- KMag 4y agoC#'s % is explicitly the remainder operator, not the modulo operator.
- recursive 4y agoNot according to reflection. Expression<Func<int, int>> lambda = n => n % 2; Console.WriteLine(((dynamic)lambda).Body.NodeType); Output is "Modulo".
- KMag 4y agoHmm... I haven't read the official spec, just the Microsoft documentation: https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/arithmetic-operators https://learn.microsoft.com/en-us/dotnet/csharp/language-ref... In any case, the behavior is rem, not mod. Ada has both rem and mod operatiors. I'm not sure how many other languages have operators for both.
- cpurdy 4y agoEcstasy uses % for modulo, and /% for divrem (division and remainder). So "a = b % c" for calculating the modulo, but "(a, r) = b /% c" to get the divisor and remainder.
- feoren 4y agoIt's a little verbose and can probably be reduced, but "((x % m) + m) % m" always works. Although it's probably not better than a check if x < 0 since branch prediction will get that right almost always. I do think it's quite odd and frustrating that modulo can return negative numbers and I don't really get the reasoning there, but there's probably a good reason I don't know about.
- xigoi 4y agoThe only reason is that C does it that way. And C does it that way because machine code does it that way.