[R] Displaying numerics to full double precision

Ben Bolker bolker at ufl.edu
Wed Dec 5 21:35:44 CET 2007




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.



More information about the R-help mailing list