Re: [R] Displaying numerics to full double precision

From: Ben Bolker <bolker_at_ufl.edu>
Date: Wed, 5 Dec 2007 12:35:44 -0800 (PST)

Jeff Delmerico wrote:
>
> Thanks Ben, that fixed the display within R. However, even after changing
> the display settings, the matrix elements still appear to be exported in
> single precision. The matrix object is being passed into my C routines as
> an SEXP Numeric type, and somewhere along the way, some of the digits are
> getting lost.
> Here's the relevant bit of my C code:
>
> SEXP
> divideMatrix(SEXP matrix_in, SEXP sub_height, SEXP sub_width, SEXP fileS)
> ...
> if ( isMatrix(matrix_in) && isNumeric(matrix_in) )
> {
> /* Use R macros to convert from SEXP to C types */
> matrix = REAL(matrix_in);
> height = INTEGER(GET_DIM(matrix_in))[0];
> width = INTEGER(GET_DIM(matrix_in))[1];
> subW = INTEGER_VALUE(sub_width);
> subH = INTEGER_VALUE(sub_height);
> ...
> }
>
> Am I using the wrong macro to convert into a double in C? Any ideas?
>
> Thanks,
> Jeff Delmerico
>
>
> Ben Bolker wrote:

>> 
>> 
>> 
>> Jeff Delmerico wrote:
>>> 
>>> I'm working on a shared library of C functions for use with R, and I
>>> want to create a matrix in R and pass it to the C routines.  I know R
>>> computes and supposedly stores numerics in double precision, but when I
>>> create a matrix of random numerics using rnorm(), the values are
>>> displayed in single precision, and also exported in single precision
>>> when I pass them out to my C routines.  An example is below:
>>> 
>>>> a <- matrix(rnorm(16, mean=10, sd=4), nrow=4)
>>>> a
>>>           [,1]      [,2]      [,3]      [,4]
>>> [1,] 14.907606 17.572872 19.708977  9.809943
>>> [2,]  9.322041 13.624452  7.745254  7.596176
>>> [3,] 10.642408  6.151546  9.937434  6.913875
>>> [4,] 14.617647  5.577073  8.217559 12.115465
>>>> storage.mode(a)
>>> [1] "double"
>>> 
>>> Does anyone know if there is a way to change the display or storage
>>> settings so that the values will be displayed to their full precision?  
>>> Or does rnorm only produce values to single precision? 
>>> 
>>> Any assistance would be greatly appreciated.
>>> 
>>> Thanks,
>>> Jeff Delmerico
>>> 
>> 
>> options("digits") # 7
>> options(digits=x)
>> 
>>   I may be mistaken, but I think the values are indeed exported
>> as double precision -- the issue here is just a display setting.
>> 
>>   Ben Bolker
>> 
>> 
>> 

>
>

 I'm not sure.
  I do know that Rinternals.h has

#define REAL(x) ((double *) DATAPTR(x))

  so that doesn't seem to be the problem ...

  Ben

-- 
View this message in context: http://www.nabble.com/Displaying-numerics-to-full-double-precision-tf4950807.html#a14179985
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.
Received on Wed 05 Dec 2007 - 20:38:42 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Wed 05 Dec 2007 - 21:30:16 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.