[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