[R] Integer division

Martin Maechler m@ech|er @end|ng |rom @t@t@m@th@ethz@ch
Mon Dec 19 15:41:51 CET 2022


>>>>> 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.

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 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