Excelente pdf. <br>E a motivação binária é válida. <br>Vou estudar a função all.equal para ver se descolo alguma do tipo all.less, pois no fundo meu problema é marcar quem está abaixo de um limite. Por ora vou definir um epsilon e verificar se x+epsilon<limite.<br>
<br>Obg,<br>C.<br><br><div class="gmail_quote">Em 14 de abril de 2011 21:11, Benilton Carvalho <span dir="ltr"><<a href="mailto:beniltoncarvalho@gmail.com">beniltoncarvalho@gmail.com</a>></span> escreveu:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
Cezar,<br>
<br>
note que nem todos estes numeros nao possuem representacao binaria perfeita:<br>
<br>
4.96 = 100.11110101110000101000111101011100001010001111010111 ( =<br>
4.9599999999999999383484909024105265228684473934444104163875499178081282073594053273515617319174792...)<br>
4.97 = 100.1111100001010001111010111000010100011110101110000101 ( =<br>
4.9699999999999999522262787102249791917074708051575354490781853972972047883147623040656351019280470...)<br>
5.02 = 101.0000010100011110101110000101000111101011100001010001111011<br>
(exatamente)<br>
5.03 = 101.0000011110101110000101000111101011100001010001111010111 (exatamente)<br>
<br>
Por fim, como a matematica e' feita na representacao binaria (que<br>
neste caso e' imperfeita), a gente nao pode esperar os mesmos<br>
resultados.<br>
<br>
Por isso a minha sugestao de usar o all.equal(), que permite o uso de<br>
tolerancia para compensar estes problemas na representacao binaria....<br>
<br>
b<br>
<br>
2011/4/15 Gustavo Henrique de Carvalho <<a href="mailto:gustavo.bio@gmail.com">gustavo.bio@gmail.com</a>>:<br>
<div><div></div><div class="h5">> Aquela resposta na página que enviei explica o porquê. Ainda, ela leva<br>
> à esse pdf:<br>
><br>
> <a href="http://www.validlab.com/goldberg/paper.pdf" target="_blank">http://www.validlab.com/goldberg/paper.pdf</a><br>
><br>
> De qualquer forma, só para ilustrar:<br>
><br>
>> a <- c(4.96, 4.97, 4.96)<br>
>> b <- c(5.02, 5.03, 5.03)<br>
>> d <- c(5.96, 5.97, 5.96)<br>
>> sd(a) == sd(b)<br>
> [1] FALSE<br>
>> sd(a) == sd(d)<br>
> [1] TRUE<br>
><br>
>> 0.2 * 0.4 == 0.08<br>
> [1] FALSE<br>
><br>
> 2011/4/14 Cézar Freitas <<a href="mailto:cezarcamelo@gmail.com">cezarcamelo@gmail.com</a>>:<br>
>> Acho que não fui claro o suficiente: os desvios deveriam, de fato, ser<br>
>> iguais (os números estão à mesma distância de suas respectivas médias),<br>
>> porém o R não retrata assim (independentemente da quantidade de dígitos) e<br>
>> eu fiquei surpreso.<br>
>><br>
>> Na minha época, sei que havia coisinhas que evitávamos, como elevar números<br>
>> muito grandes ao quadrado para somá-los e depois dividi-los, quando era<br>
>> possível contornar o problema aplicando a divisão previamente, mas nas<br>
>> máquinas de hoje eu achei que não era necessário preocupar-se com tais<br>
>> acontecimentos.<br>
>><br>
>> Alguma outra pista?<br>
>><br>
>> C.<br>
>><br>
>> Em 14 de abril de 2011 17:13, Gustavo Henrique de Carvalho<br>
>> <<a href="mailto:gustavo.bio@gmail.com">gustavo.bio@gmail.com</a>> escreveu:<br>
>>><br>
>>><br>
>>> <a href="http://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-doesn_0027t-R-think-these-numbers-are-equal_003f" target="_blank">http://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-doesn_0027t-R-think-these-numbers-are-equal_003f</a><br>
>>><br>
>>> > print(y$dp, digits = 13)<br>
>>> [1] 0.005773502691896 0.005773502691897<br>
>>><br>
>>> 2011/4/14 Benilton Carvalho <<a href="mailto:beniltoncarvalho@gmail.com">beniltoncarvalho@gmail.com</a>>:<br>
>>> > Cezar,<br>
>>> ><br>
>>> > o que vc esta' procurando e' o seguinte:<br>
>>> ><br>
>>> > all.equal(y$dp - refer, rep(0, 2))<br>
>>> ><br>
>>> > b<br>
>>> ><br>
>>> > 2011/4/14 Cézar Freitas <<a href="mailto:cezarcamelo@gmail.com">cezarcamelo@gmail.com</a>>:<br>
>>> >> Olá.<br>
>>> >><br>
>>> >> Bem, escrevo apenas para ilustrar algo que me surpreendeu. Estava<br>
>>> >> plotando<br>
>>> >> gráficos e os colorindo segundo seu desvio padrão estava ou não acima<br>
>>> >> de um<br>
>>> >> ponto de corte. Reproduzo abaixo a parte do código que interessa:<br>
>>> >><br>
>>> >> y=as.data.frame(matrix(c(4.96,5.02,4.97,5.03,4.96,5.03), ncol=3))<br>
>>> >> y$dp=apply(y,1,sd)<br>
>>> >><br>
>>> >>> y<br>
>>> >> V1 V2 V3 dp<br>
>>> >> 1 4.96 4.97 4.96 0.005773503<br>
>>> >> 2 5.02 5.03 5.03 0.005773503<br>
>>> >><br>
>>> >> refer=y$dp[1]<br>
>>> >><br>
>>> >> y$dp<=refer<br>
>>> >><br>
>>> >> [1] TRUE FALSE<br>
>>> >><br>
>>> >> Sei que o R é extremamente preciso e até podemos alterar sua mantissa<br>
>>> >> nos<br>
>>> >> cálculos, mas isso não é rotineiro para cálculos tão simples. O pessoal<br>
>>> >> do<br>
>>> >> cálculo numérico saberia dizer o que evitar para não cair nessas<br>
>>> >> armadilhas<br>
>>> >> no futuro?<br>
>>> >><br>
>>> >> Abraços,<br>
>>> >> Cézar Freitas<br>
>>> >><br>
>>> >> _______________________________________________<br>
>>> >> R-br mailing list<br>
>>> >> <a href="mailto:R-br@listas.c3sl.ufpr.br">R-br@listas.c3sl.ufpr.br</a><br>
>>> >> <a href="https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br" target="_blank">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a><br>
>>> >><br>
>>> >><br>
>>> > _______________________________________________<br>
>>> > R-br mailing list<br>
>>> > <a href="mailto:R-br@listas.c3sl.ufpr.br">R-br@listas.c3sl.ufpr.br</a><br>
>>> > <a href="https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br" target="_blank">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a><br>
>>> ><br>
>><br>
>><br>
><br>
<br>
<br>
<br>
</div></div><font color="#888888">--<br>
Successful people ask better questions, and as a result, they get<br>
better answers. (Tony Robbins)<br>
</font></blockquote></div><br>