[R] Integer division
Bert Gunter
bgunter@4567 @end|ng |rom gm@||@com
Mon Dec 19 17:01:37 CET 2022
If R does exactly what it says it does, why are you surprised, whether or
not that is what other languages do? (Please excuse my fractured English).
(Note: -8 = 1 + 3*(-3) = (-8 %% 3) + 3 * (-8 %/% 3 ), exactly as the
Help excerpt you cited says)
Of course, one may always question the wisdom of whatever policy R chooses,
but that gets into the bowels of what standards to follow, corner cases,
and all that, about which I have nothing to say. My only point is the
above.
-- Bert
On Mon, Dec 19, 2022 at 7:15 AM 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.
>
[[alternative HTML version deleted]]
More information about the R-help
mailing list