[#3109] Is divmod dangerous? — Dave Thomas <Dave@...>

14 messages 2000/06/06

[#3149] Retrieving the hostname and port in net/http — Roland Jesse <jesse@...>

Hi,

12 messages 2000/06/07

[#3222] Ruby coding standard? — Robert Feldt <feldt@...>

16 messages 2000/06/09

[#3277] Re: BUG or something? — Aleksi Niemel<aleksi.niemela@...>

> |I am new to Ruby and this brings up a question I have had

17 messages 2000/06/12
[#3281] Re: BUG or something? — Dave Thomas <Dave@...> 2000/06/12

Aleksi Niemel<aleksi.niemela@cinnober.com> writes:

[#3296] RE: about documentation — Aleksi Niemel<aleksi.niemela@...>

> I want to contribute to the ruby project in my spare time.

15 messages 2000/06/12

[#3407] Waffling between Python and Ruby — "Warren Postma" <embed@...>

I was looking at the Ruby editor/IDE for windows and was disappointed with

19 messages 2000/06/14

[#3410] Exercice: Translate into Ruby :-) — Jilani Khaldi <jilanik@...>

Hi All,

17 messages 2000/06/14

[#3415] Re: Waffling between Python and Ruby — Andrew Hunt <andy@...>

>Static typing..., hmm,...

11 messages 2000/06/14

[#3453] Re: Static Typing( Was: Waffling between Python and Ruby) — Andrew Hunt <andy@...>

32 messages 2000/06/16

[#3516] Deep copy? — Hugh Sasse Staff Elec Eng <hgs@...>

Given that I cannot overload =, how should I go about ensuring a deep

20 messages 2000/06/19

[#3694] Why it's quiet — hal9000@...

We are all busy learning the new language

26 messages 2000/06/29
[#3703] Re: Why it's quiet — "NAKAMURA, Hiroshi" <nahi@...> 2000/06/30

Hi,

[#3705] Re: Why it's quiet — matz@... (Yukihiro Matsumoto) 2000/06/30

Hi,

[ruby-talk:03114] Re: Is divmod dangerous?

From: Mathieu Bouchard <matju@...>
Date: 2000-06-06 09:13:12 UTC
List: ruby-talk #3114
> In Ruby, however, divmod returns the quotient and modulo:
>    for x in [13, -13]
>       for y in [4, -4]
>         q, r = x.divmod(y)
>         puts q*y + r
>       end
>    end
>    =>  13, 9, -9, -13
> This strikes me as dangerous, as I suspect most people would expect
> divmod to return a remainder, not a modulus.
> Anyone have any opinions?

the name "divmod" says it all: the second return value is a modulo. I also
agree that q*y+r should equal x. The way it should be done is to fudge the
quotient instead. I'll tell you why. 

The most useful combination of division and remainder/modulo is in
encoding two integers, an outer and an inner, as only one integer. The
inner normally is nonnegative. Such partitioning of integers is useful
for: mapping multidimensional array indices unto unidimensional ones;
finding a weekday and a week number from a day number; handling bit
fields; sine table lookup and similar; finding a character cell position
from a pixel position; ...

Generally a first characteristic of such systems is that the behaviour
around 0 has to be uniform: all the partitions must be of equal sizes. A
second characteristic is that it should be invertible by the a*b+c rule
(most of the uses I listed above have useful inverses)

That's why -1 divmod 5 must return -1, 4, and not 0, -1.

I would actually favour a change so that in a/b the result be rounded
toward the lowest, not the smallest (smallest being lowest absolute
value), but since it might be breaking existing programs, adding a method
"div" would be appropriate, and we would get the bonus that the name "div" 
is the other half in "divmod". but then we have the problem that "mod" is
called % but not "mod", while the % of most popular languages is called
"remainder" (in full length) here. oh well... 



btw, anyone can provide a good list of uses for the "/" "remainder" duo,
just in case...?





Mathieu Bouchard


In This Thread