[R] problem with the precision of numbers

(Ted Harding) Ted.Harding at manchester.ac.uk
Mon Jan 25 01:48:00 CET 2010


On 25-Jan-10 00:12:29, William Dunlap wrote:
>> -----Original Message-----
>> From: r-help-bounces at r-project.org 
>> [mailto:r-help-bounces at r-project.org] On Behalf Of kayj
>> Sent: Sunday, January 24, 2010 2:24 PM
>> To: r-help at r-project.org
>> Subject: [R] problem with the precision of numbers
>> 
>> 
>> Hi All,
>> 
>> I was wondering if R can deal with high precsion numbers,
>> below is an example that I tried on using R and Maple where
>> I got different results. I was not able to use the r-bc
>> package in R, instead I used the Rmpfr package, below are
>> both R and Maple results
>> 
>> > library(Rmpfr) 
>> > 
>> > s<-mpfr(0,500)
>> > j <- mpfr(-1,500)
>> > 
>> > for (i in 0:80){ 
>> + p<-as.numeric(i)
>> + c<-choose(80,i)
>> + s=s+((j^i)*c*(1-(i+1)*1/200)^200)
>> +  
>> + }
>> > s
>> 1 'mpfr' number of precision  500   bits 
>> [1]
>> 4.648482576937991803920232923178809334383533710528724199663087
>> 37537948109157913028294746130428691910923220334036490860878721
>> 19205043462728841279067042348e-6
> 
> You are computing (1-(i+1)*1/200)^200 with ordinary
> 32-bit integers and 64-bit double precision numbers.
> The same goes for choose(80,i).  Try something like
> 
> f <- function (precision) 
> {
>     require(Rmpfr)
>     s <- mpfr(0, precision)
>     j <- mpfr(-1, precision)
>     c <- mpfr(1, precision)
>     for (i in 0:80) {
>         i <- mpfr(i, precision)
>         s <- s + ((j^i) * c * (1 - (i + 1) * 1/200)^200)
>         c <- (c * (80 - i))/(i + 1)
>     }
>     s
> }
>> print(f(precision=500), digits=25)
> 1 'mpfr' number of precision  500   bits 
> [1] 6.656852478966203769967328e-20
> 
> Bill Dunlap
> Spotfire, TIBCO Software
> wdunlap tibco.com

Bill, using your code strategy I agree with your mpfr result
(and with Maple) using 'bc:

s=0
j = -1
c = 1
for (i=0; i <= 80; i++ ){
        s = s + ((j^i) * c * (1 - (i + 1) * 1/200)^200)
        c = (c * (80 - i))/(i + 1)
    }
s
0.
0000000000 0000000006 6568524789 6620376996 7327577118
2135789699 5101929940 0816838328 9634271996 1257038416 
6039147205 2215051658 2822460868 2286772321 8214397124
2739979506 9906258378 1667597096 6899329803 4460676207

(time to look and see what I did wrong before ...)
Ted.

>> Maple result
>> 
>> 6.656852479*10^(-20)
>> 
>> 
>> why are the two results different?
>> 
>> I appreciate your help
>> 
>> 
>> 
>> 
>> -- 
>> View this message in context: 
>> http://n4.nabble.com/problem-with-the-precision-of-numbers-tp1
> 288905p1288905.html
>> Sent from the R help mailing list archive at Nabble.com.
>> 
>> ______________________________________________
>> R-help at r-project.org mailing list
>> 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 at r-project.org mailing list
> 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.

--------------------------------------------------------------------
E-Mail: (Ted Harding) <Ted.Harding at manchester.ac.uk>
Fax-to-email: +44 (0)870 094 0861
Date: 25-Jan-10                                       Time: 00:47:53
------------------------------ XFMail ------------------------------



More information about the R-help mailing list