[R] Number of digits of a value for problem 7.31 RFAQ SOLVED not really
Matthieu Stigler
stigler3 at etu.unige.ch
Mon Feb 18 16:16:51 CET 2008
Matthieu Stigler a e'crit :
> Richard.Cotton at hsl.gov.uk a e'crit :
>>>> What I mean is if R shows 2.3456 I want to obtain the info that
>> digits=4
>>>> even if in facts the value has more (internal) digits.
>>> Try:
>>> x = 1.23456789
>>> format(x, nsmall=20)
>>> # [1] "1.23456788999999989009"
>>
>> I've just re-read the question. I suspect what you really wanted was
>> something like:
>>
>> getndp <- function(x, tol=2*.Machine$double.eps)
>> {
>> ndp <- 0
>> while(!isTRUE(all.equal(x, round(x, ndp), tol=tol))) ndp <- ndp+1
>> if(ndp > -log10(tol)) warning("Tolerance reached, ndp possibly
>> underestimated.")
>> ndp }
>>
>> x = 0.123456
>> getndp(x)
>> # [1] 6
>>
>> x2 <- 3
>> getndp(x2)
>> # [1] 0
>> x3 <- 0.1234567890123456789
>> getndp(x3)
>> # [1] 16
>> # Warning message:
>> # In getndp(x3) : Tolerance reached, ndp possibly underestimated.
>>
>> Regards,
>> Richie.
>>
>> Mathematical Sciences Unit
>> HSL
>>
>
> Nice! Thanks a lot!!
> Now I can solve my problem that:
>
> target<-0.223423874568437
> target<=target+0.1-0.1 #TRUE
> target>=target+0.1-0.1 #FALSE!!
> target==target+0.1-0.1 #FALSE!!
>
> by:
> target<=round(target+0.1-0.1, getndp(target)) #TRUE
> target>=round(target+0.1-0.1, getndp(target)) #TRUE!!
> target==round(target+0.1-0.1, getndp(target)) #TRUE!!
>
>
Actually (after some trials) there is a little problem when faced with
zeros...
>getndp(1.0)
[1] 0
Note that it is only a partial problem because this happens only when
the value is taken with other and so
max(apply(matrix(allvalues,1,getndp))) will give the expected answer.
But when faced with only one value...
Note that I thought on a very different way which was starting from the
point that as.character seems to work:
a<-as.character(1.23134)
b<-strsplit(a,"\\.")
nchar(b)
But I don't see how to do so that I can extract only the second element
(maybe otherwise with sub or grep?)... But the method you gave is really
more reliable than my "makeshift repair"
Thanks again!
More information about the R-help
mailing list