"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 <maech...@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" > > <g...@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@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@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@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]] ______________________________________________ R-help@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.