[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