[R] gmp::bigq vs. MASS::fractions
Ivan Krylov
kry|ov@r00t @end|ng |rom gm@||@com
Sat Jan 7 17:55:00 CET 2023
On Sat, 7 Jan 2023 17:29:35 +0100
Sigbert Klinke <sigbert using wiwi.hu-berlin.de> wrote:
> > x <- (0:7)/7
>
> > MASS::fractions(x)
>
> [1] 0 1/7 2/7 3/7 4/7 5/7 6/7 1
>
> > gmp::as.bigq(x)
>
> Big Rational ('bigq') object of length 8:
>
> [1] 0
> 2573485501354569/18014398509481984 2573485501354569/9007199254740992
>
> [4] 7720456504063707/18014398509481984
> 2573485501354569/4503599627370496 6433713753386423/9007199254740992
>
> [7] 7720456504063707/9007199254740992 1
That's a consequence of the way fractions are internally represented
inside most modern processors. In short, gmp::as.bigq takes the red
pill and shows you the reality as it is (all fractions have a limited
number of significant digits -- 52 binary digits -- and are required to
have a denominator that's a power of two), while MASS::fractions tries
to guess what the original number might have been before an imprecise
approximation of k/7 had been computed. (Since 7 is not a power of 2,
only 0 and 1 have an exact representation in your example.)
For more information, see R FAQ 7.31:
https://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-doesn_0027t-R-think-these-numbers-are-equal_003f
What do you need the fractions for?
--
Best regards,
Ivan
More information about the R-help
mailing list