[R] : Ramanujan and the accuracy of floating point computations - using Rmpfr in R

John Nash John.Nash at uottawa.ca
Fri Jul 3 17:08:07 CEST 2015




Third try -- I unsubscribed and re-subscribed. Sorry to Ravi for extra
traffic.

In case anyone gets a duplicate, R-help bounced my msg "from non-member" (I changed server, but not email yesterday,
so possibly something changed enough). Trying again.

JN

I got the Wolfram answer as follows:

library(Rmpfr)
n163 <- mpfr(163, 500)
n163
pi500 <- mpfr(pi, 500)
pi500
pitan <- mpfr(4, 500)*atan(mpfr(1,500))
pitan
pitan-pi500
r500 <- exp(sqrt(n163)*pitan)
r500
check <- "262537412640768743.99999999999925007259719818568887935385..."
savehistory("jnramanujan.R")

Note that I used 4*atan(1) to get pi. It seems that may be important,
rather than converting.

JN

On 15-07-03 06:00 AM, r-help-request at r-project.org wrote:

> Message: 40
> Date: Thu, 2 Jul 2015 22:38:45 +0000
> From: Ravi Varadhan <ravi.varadhan at jhu.edu>
> To: "'Richard M. Heiberger'" <rmh at temple.edu>, Aditya Singh
> 	<aps6dl at yahoo.com>
> Cc: r-help <r-help at r-project.org>
> Subject: Re: [R] : Ramanujan and the accuracy of floating point
> 	computations - using Rmpfr in R
> Message-ID:
> 	<14ad39aaf6a542849bbf3f62a0c2f38f at DOM-EB1-2013.win.ad.jhu.edu>
> Content-Type: text/plain; charset="utf-8"
>
> Hi Rich,
>
> The Wolfram answer is correct.  
> http://mathworld.wolfram.com/RamanujanConstant.html 
>
> There is no code for Wolfram alpha.  You just go to their web engine and plug in the expression and it will give you the answer.
> http://www.wolframalpha.com/ 
>
> I am not sure that the precedence matters in Rmpfr.  Even if it does, the answer you get is still wrong as you showed.
>
> Thanks,
> Ravi
>
> -----Original Message-----
> From: Richard M. Heiberger [mailto:rmh at temple.edu] 
> Sent: Thursday, July 02, 2015 6:30 PM
> To: Aditya Singh
> Cc: Ravi Varadhan; r-help
> Subject: Re: [R] : Ramanujan and the accuracy of floating point computations - using Rmpfr in R
>
> There is a precedence error in your R attempt.  You need to convert
> 163 to 120 bits first, before taking
> its square root.
>
>>> exp(sqrt(mpfr(163, 120)) * mpfr(pi, 120))
> 1 'mpfr' number of precision  120   bits
> [1] 262537412640768333.51635812597335712954
>
> ## just the last four characters to the left of the decimal point.
>>> tmp <- c(baseR=8256, Wolfram=8744, Rmpfr=8333, wrongRmpfr=7837) 
>>> tmp-tmp[2]
>      baseR    Wolfram      Rmpfr wrongRmpfr
>       -488          0       -411       -907
> You didn't give the Wolfram alpha code you used.  There is no way of verifying the correct value from your email.
> Please check that you didn't have a similar precedence error in that code.
>
> Rich
>
>
> On Thu, Jul 2, 2015 at 2:02 PM, Aditya Singh via R-help <r-help at r-project.org> wrote:
>>> Ravi
>>>
>>> I am a chemical engineer by training. Is there not something like law of corresponding states in numerical analysis?
>>>
>>> Aditya
>>>
>>>
>>>
>>> ------------------------------
>>> On Thu 2 Jul, 2015 7:28 AM PDT Ravi Varadhan wrote:
>>>
>>>>> Hi,
>>>>>
>>>>> Ramanujan supposedly discovered that the number, 163, has this interesting property that exp(sqrt(163)*pi), which is obviously a transcendental number, is real close to an integer (close to 10^(-12)).
>>>>>
>>>>> If I compute this using the Wolfram alpha engine, I get:
>>>>> 262537412640768743.99999999999925007259719818568887935385...
>>>>>
>>>>> When I do this in R 3.1.1 (64-bit windows), I get:
>>>>> 262537412640768256.0000
>>>>>
>>>>> The absolute error between the exact and R's value is 488, with a relative error of about 1.9x10^(-15).
>>>>>
>>>>> In order to replicate Wolfram Alpha, I tried doing this in "Rmfpr" but I am unable to get accurate results:
>>>>>
>>>>> library(Rmpfr)
>>>>>
>>>>>
>>>>>>> exp(sqrt(163) * mpfr(pi, 120))
>>>>> 1 'mpfr' number of precision  120   bits
>>>>>
>>>>> [1] 262537412640767837.08771354274620169031
>>>>>
>>>>> The above answer is not only inaccurate, but it is actually worse than the answer using the usual double precision.  Any thoughts as to what I am doing wrong?
>>>>>
>>>>> Thank you,
>>>>> Ravi
>>>>>
>>>>>
>>>>>
>>>>>       [[alternative HTML version deleted]]
>>>>>
>>>>> ______________________________________________
>>>>> 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.
>>> ______________________________________________
>>> 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.
> ------------------------------




More information about the R-help mailing list