[R-br] precisão numérica no R - uma falha?

Gustavo Henrique de Carvalho gustavo.bio em gmail.com
Quinta Abril 14 20:37:24 BRT 2011


Aquela resposta na página que enviei explica o porquê. Ainda, ela leva
à esse pdf:

http://www.validlab.com/goldberg/paper.pdf

De qualquer forma, só para ilustrar:

> a <- c(4.96, 4.97, 4.96)
> b <- c(5.02, 5.03, 5.03)
> d <- c(5.96, 5.97, 5.96)
> sd(a) == sd(b)
[1] FALSE
> sd(a) == sd(d)
[1] TRUE

> 0.2 * 0.4 == 0.08
[1] FALSE

2011/4/14 Cézar Freitas <cezarcamelo em gmail.com>:
> Acho que não fui claro o suficiente: os desvios deveriam, de fato, ser
> iguais (os números estão à mesma distância de suas respectivas médias),
> porém o R não retrata assim (independentemente da quantidade de dígitos) e
> eu fiquei surpreso.
>
> Na minha época, sei que havia coisinhas que evitávamos, como elevar números
> muito grandes ao quadrado para somá-los e depois dividi-los, quando era
> possível contornar o problema aplicando a divisão previamente, mas nas
> máquinas de hoje eu achei que não era necessário preocupar-se com tais
> acontecimentos.
>
> Alguma outra pista?
>
> C.
>
> Em 14 de abril de 2011 17:13, Gustavo Henrique de Carvalho
> <gustavo.bio em gmail.com> escreveu:
>>
>>
>> http://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-doesn_0027t-R-think-these-numbers-are-equal_003f
>>
>> > print(y$dp, digits = 13)
>> [1] 0.005773502691896 0.005773502691897
>>
>> 2011/4/14 Benilton Carvalho <beniltoncarvalho em gmail.com>:
>> > Cezar,
>> >
>> > o que vc esta' procurando e' o seguinte:
>> >
>> > all.equal(y$dp - refer, rep(0, 2))
>> >
>> > b
>> >
>> > 2011/4/14 Cézar Freitas <cezarcamelo em gmail.com>:
>> >> Olá.
>> >>
>> >> Bem, escrevo apenas para ilustrar algo que me surpreendeu. Estava
>> >> plotando
>> >> gráficos e os colorindo segundo seu desvio padrão estava ou não acima
>> >> de um
>> >> ponto de corte. Reproduzo abaixo a parte do código que interessa:
>> >>
>> >> y=as.data.frame(matrix(c(4.96,5.02,4.97,5.03,4.96,5.03), ncol=3))
>> >> y$dp=apply(y,1,sd)
>> >>
>> >>> y
>> >>     V1   V2   V3          dp
>> >> 1 4.96 4.97 4.96 0.005773503
>> >> 2 5.02 5.03 5.03 0.005773503
>> >>
>> >> refer=y$dp[1]
>> >>
>> >> y$dp<=refer
>> >>
>> >> [1]  TRUE FALSE
>> >>
>> >> Sei que o R é extremamente preciso e até podemos alterar sua mantissa
>> >> nos
>> >> cálculos, mas isso não é rotineiro para cálculos tão simples. O pessoal
>> >> do
>> >> cálculo numérico saberia dizer o que evitar para não cair nessas
>> >> armadilhas
>> >> no futuro?
>> >>
>> >> Abraços,
>> >> Cézar Freitas
>> >>
>> >> _______________________________________________
>> >> R-br mailing list
>> >> R-br em listas.c3sl.ufpr.br
>> >> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
>> >>
>> >>
>> > _______________________________________________
>> > R-br mailing list
>> > R-br em listas.c3sl.ufpr.br
>> > https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
>> >
>
>


Mais detalhes sobre a lista de discussão R-br