[R] Integer division

Jeff Newmiller jdnewm|| @end|ng |rom dcn@d@v|@@c@@u@
Mon Dec 19 17:37:32 CET 2022


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.

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.



More information about the R-help mailing list