[R] Integer division
Bert Gunter
bgunter@4567 @end|ng |rom gm@||@com
Mon Dec 19 19:12:00 CET 2022
"It would probably be helpful to add a short paragraph to ?Arithmetic
about the fact that R's %% uses the "floored" version, as
recommended by Donald Knuth and as documented on the above
Wikipedia page."
Agreed (who am I to disagree?!).
But perhaps something simpler like:
"a %% b must always be between 0 (inclusive) and b(exclusive)."
ergo, for examples,
> 5 %% 3
[1] 2 ## 5 = 1*3 + 2
> 5 %% -3
[1] -1 ## 5 = 2*(-3) + (-1)
> -5 %% 3
[1] 1 ## -5 = (-2) * 3 + 1
> -5 %% -3
[1] -2 ## -5 = 1* (-3) + (-2)
My point is that I believe it is easier for most non-math folks to groc the
relationship through a simple rule and such examples than via an algorithm.
Feel free to disagree, as this is just my opinion.
Cheers,
Bert
On Mon, Dec 19, 2022 at 9:30 AM Martin Maechler <maechler using stat.math.ethz.ch>
wrote:
> >>>>> Jeff Newmiller
> >>>>> on Mon, 19 Dec 2022 08:37:32 -0800 writes:
>
> > See https://en.m.wikipedia.org/wiki/Modulo_operation,
> > Variants of the definition, esp the point that Knuth
> > recommended the floor definition. The behavior of %/%
> > follows from the definition of %% given the documented
> > relation in ?Arithmetic.
>
> > R is not obligated to repeat the mistakes of C or Fortran.
>
> Fortune nomination! ==> BCC: maintainer("fortunes")
>
> The Wikipedia page is indeed revealing amazing facts about how
> differently this has been implemented in computer languages.
>
> Then, after all, Göran still got a point to make here, given that
> not anymore are all R users equipped with a Ph.D in math or equivalent..:
>
> It would probably be helpful to add a short paragraph to ?Arithmetic
> about the fact that R's %% uses the "floored" version, as
> recommended by Donald Knuth and as documented on the above
> Wikipedia page.
>
> Martin
>
> > On December 19, 2022 7:15:01 AM PST, "Göran Broström"
> > <gb using ehar.se> wrote:
> >>
> >>
> >> Den 2022-12-19 kl. 15:41, skrev Martin Maechler:
> >>>>>>>> Göran Broström on Mon, 19 Dec 2022 14:22:00 +0100
> >>>>>>>> writes:
> >>>
> >>> > I have a long vector x with five-digit codes where the
> >>> > first digit of each is of special interest, so I
> >>> extracted > them through
> >>>
> >>> >> y <- x %/% 10000
> >>>
> >>> > but to my surprise y contained the value -1 in some >
> >>> places. It turned out that x contains -1 as a symbol for
> >>> > 'missing value' so in effect I found that
> >>>
> >>> >> -1 %/% 10000 == -1
> >>>
> >>> > Had to check the help page for "%/%", and the first >
> >>> relevant comment I found was:
> >>>
> >>> > "Users are sometimes surprised by the value returned".
> >>>
> >>> > No surprise there. Further down:
> >>>
> >>> > ‘%%’ indicates ‘x mod y’ (“x modulo y”) and ‘%/%’ >
> >>> indicates integer division. It is guaranteed that
> >>>
> >>> > ‘ x == (x %% y) + y * (x %/% y) ’ (up to rounding >
> >>> error)
> >>>
> >>> > I did expect (a %/% b) to return round(a / b), like >
> >>> gfortran and gcc,
> >>>
> >>> What??? I cannot believe you.
> >>
> >> Well, you shouldn't, I generalized too far.
> >>>
> >>> No time for checking now, but I bet that 8 / 3 gives 2
> >>> and not 3 in C and Fortran (and hence gcc, etc)
> >>
> >> But compare -8 %/% 3 in R and -8 / 3 in C/Fortran.
> >>
> >> G,
> >>
> >>>
> >>>
> >>> > but instead I get floor(a / b) in > R. What is the
> >>> reason for these different definitions? And > shouldn't
> >>> R's definition be documented?
> >>>
> >>>
> >>>
> >>> > Thanks, Göran
> >>>
> >>> > ______________________________________________ >
> >>> R-help using r-project.org mailing list -- To UNSUBSCRIBE and
> >>> > more, see https://stat.ethz.ch/mailman/listinfo/r-help
> >>> > PLEASE do read the posting guide >
> >>> http://www.R-project.org/posting-guide.html and provide
> >>> > commented, minimal, self-contained, reproducible code.
> >>
> >> ______________________________________________
> >> R-help using r-project.org mailing list -- To UNSUBSCRIBE and
> >> more, see https://stat.ethz.ch/mailman/listinfo/r-help
> >> PLEASE do read the posting guide
> >> http://www.R-project.org/posting-guide.html and provide
> >> commented, minimal, self-contained, reproducible code.
>
> > --
> > Sent from my phone. Please excuse my brevity.
>
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
[[alternative HTML version deleted]]
More information about the R-help
mailing list