[R] Integer division

Göran Broström gb @end|ng |rom eh@r@@e
Mon Dec 19 16:15:01 CET 2022



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.



More information about the R-help mailing list