[R-pkg-devel] How to get arbitrary precise inputs from R for an Rcpp package?

J C Nash pro|jcn@@h @end|ng |rom gm@||@com
Fri Jul 19 02:04:01 CEST 2024


On the other hand, Rmpfr did allow me to write an mpfr rootfinder for Martin M. in 2011
(he modified and streamlined it for use) since one can run R codes on mpfr objects
as long as one is careful which operators are applied. So one probably could do
something with a very pedestrian eigenvalue method. One or other of the codes
from my Compact Numerical Methods for Computers might be applicable, but the 1st
edition Step-And-Description codes are likely to be more useful than the Pascal
of the Second Edition. The one-sided Jacobi approach for eigen or svd has a pretty
tiny code. No claims for great efficiency, but in times when loading from floppies
was the order of the day, the short code often got the lowest start to finish elapsed
time.

Best, JN


On 2024-07-18 19:50, Simon Urbanek wrote:
> Khue,
> 
> 
>> On 19/07/2024, at 11:32 AM, Khue Tran <tran3 using kenyon.edu> wrote:
>>
>> Thank you for the suggestion, Denes, Vladimir, and Dirk. I have indeed
>> looked into Rmpfr and while the package can interface GNU MPFR with R
>> smoothly, as of right now, it doesn't have all the functions I need (ie.
>> eigen for mpfr class) and when one input decimals, say 0.1 to mpfr(), the
>> precision is still limited by R's default double precision.
>>
> 
> 
> Don't use doubles, use decimal fractions:
> 
>> Rmpfr::mpfr(gmp::as.bigq(1,10), 512)
> 1 'mpfr' number of precision  512   bits
> [1] 0.100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002
> 
> As for eigen() - I'm not aware of an arbitrary precision solver, so I think the inputs are your least problem - most tools out there use LAPACK which doesn't support arbitrary precision so your input precision is likely irrelevant in this case.
> 
> Cheers,
> Simon
> 
> 
> 
>> Thank you for the note, Dirk. I will keep in mind to send any future
>> questions regarding Rcpp to the Rcpp-devel mailing list. I understand that
>> the type used in the Boost library for precision is not one of the types
>> supported by SEXP, so it will be more complicated to map between the cpp
>> codes and R. Given Rmpfr doesn't provide all necessary mpfr calculations
>> (and embarking on interfacing Eigen with Rmpfr is not a small task), does
>> taking input as strings seem like the best option for me to get precise
>> inputs?
>>
>> Sincerely,
>> Khue
>>
>> On Fri, Jul 19, 2024 at 8:29 AM Dirk Eddelbuettel <edd using debian.org> wrote:
>>
>>>
>>> Hi Khue,
>>>
>>> On 19 July 2024 at 06:29, Khue Tran wrote:
>>> | I am currently trying to get precise inputs by taking strings instead of
>>> | numbers then writing a function to decompose the string into a rational
>>> | with the denominator in the form of 10^(-n) where n is the number of
>>> | decimal places. I am not sure if this is the only way or if there is a
>>> | better method out there that I do not know of, so if you can think of a
>>> | general way to get precise inputs from users, it will be greatly
>>> | appreciated!
>>>
>>> That is one possible way. The constraint really is that the .Call()
>>> interface
>>> we use for all [1] extensions to R only knowns SEXP types which map to a
>>> small set of known types: double, int, string, bool, ...  The type used by
>>> the Boost library you are using is not among them, so you have to add code
>>> to
>>> map back and forth. Rcpp makes that easier; it is still far from automatic.
>>>
>>> R has packages such as Rmpfr interfacing GNU MPFR based on GMP. Maybe that
>>> is
>>> good enough?  Also note that Rcpp has a dedicated (low volume and friendly)
>>> mailing list where questions such as this one may be better suited.
>>>
>>> Cheers, Dirk
>>>
>>> [1] A slight generalisation. There are others but they are less common /
>>> not
>>> recommended.
>>>
>>> --
>>> dirk.eddelbuettel.com | @eddelbuettel | edd using debian.org
>>>
>>
>> 	[[alternative HTML version deleted]]
>>
>> ______________________________________________
>> R-package-devel using r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-package-devel
>>
> 
> ______________________________________________
> R-package-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-package-devel



More information about the R-package-devel mailing list