[R-pkg-devel] How to get arbitrary precise inputs from R for an Rcpp package?
Simon Urbanek
@|mon@urb@nek @end|ng |rom R-project@org
Fri Jul 19 01:50:28 CEST 2024
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
>
More information about the R-package-devel
mailing list