[R] Annoyance with %/%

William Dunlap wdunlap at tibco.com
Wed Mar 11 16:14:54 CET 2015


> %/% which, BTW,
> violated the sacred rule that for all a, and non-zero b:
>
> a = b * (a %/% b) + a %% b
>
> Namely, that Inf %/% n is not Inf, but NaN.

But the other sacred rule is that a%%b is >=0 and <b.

By the way, you will run into problems with %% long before Inf.  E.g.,
  > (1 + 2^53) %% 2 # 1 if you had infinite precision
  [1] 0
  > (2 + 2^53) %% 2
  [1] 0
  Warning message:
  probable complete loss of accuracy in modulus


Bill Dunlap
TIBCO Software
wdunlap tibco.com

On Wed, Mar 11, 2015 at 4:25 AM, ALBERTO VIEIRA FERREIRA MONTEIRO <
albmont at centroin.com.br> wrote:

> I've just found an annoyance with the behaviour of %/% which, BTW,
> violated the sacred rule that for all a, and non-zero b:
>
> a = b * (a %/% b) + a %% b
>
> Namely, that Inf %/% n is not Inf, but NaN.
>
> Why is this so? It's an annoyance, because in expressions like:
>
> big.vector.1[a, b, c] <- big.vector.2[a, b, c] %/% n
>
> we must treat Inf and -Inf as exceptions, when a simple division does
> not have these exceptions
>
> BTW, I treated this exception the way Grace Hopper would be proud of,
> namely,
> "it's easier to ask forgiveness than it is to get permission", but at
> the cost of memory:
>
> big.vector.1 <- big.vector.2
> big.vector.1[a, b, c] <- big.vector.2[a, b, c] %/% n
> tst <- is.nan(big.vector.1)
> if (any(tst)) big.vector.1[tst] <- big.vector.2
>
> Alberto Monteiro
>
> ______________________________________________
> R-help at 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