
Boa noite a todos.Há alguma forma de trabalhar com números muito pequenos no R?O cálculo abaixo não é exatamente igual a -1. É muito próximo, mas não igual.Há alguma forma de realizar esse cálculo?AbsLuiz
500^(-10)[1] 1.024e-27 500^(-10)-1[1] -1

Luiz, Esse problema volta e meia é discutido aqui na lista, você poderá encontrar respostas para essa sua dúvida em posts anteriores. Para uma visão mais completa ("definitiva" segundo alguns) remeto-lhe ao texto do Goldberg: http://dl.acm.org/citation.cfm?id=103163 HTH -- Cesar Rabak 2016-12-09 23:38 GMT-02:00 Luiz Leal via R-br <r-br@listas.c3sl.ufpr.br>:
Boa noite a todos. Há alguma forma de trabalhar com números muito pequenos no R? O cálculo abaixo não é exatamente igual a -1. É muito próximo, mas não igual. Há alguma forma de realizar esse cálculo? Abs Luiz
500^(-10) [1] 1.024e-27
500^(-10)-1 [1] -1
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

segue sugestão library(Rmpfr) mpfr(500^(-10), precBits = 255) - mpfr(1, precBits = 255) # 1 'mpfr' number of precision 255 bits # [1] -0.999999999999999999999999998975999999999999914663505297831951000646311908486498 ## caracteristica numerica da maquina .Machine

Muito obrigado pela sugestão, mas ocorreu outro problema
library(Rmpfr)> p <- mpfr(c(500,600,700)^(-10), precBits=255) - mpfr(1,precBits=255)> shapiro.test(p)Erro: is.numeric(x) is not TRUE> shapiro.test(as.numeric(p))Erro em shapiro.test(as.numeric(p)) : all 'x' values are identical Há como solucionar? Desde já gradeço Luiz
On Saturday, December 10, 2016 10:25 PM, salah via R-br <r-br@listas.c3sl.ufpr.br> wrote: segue sugestão library(Rmpfr) mpfr(500^(-10), precBits = 255) - mpfr(1, precBits = 255) # 1 'mpfr' number of precision 255 bits # [1] -0.999999999999999999999999998975999999999999914663505297831951000646311908486498 ## caracteristica numerica da maquina .Machine _______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e fornea cdigo mnimo reproduzvel.

A solução seria você escrever uma função de teste de Shapiro usando a biblioteca Rmprf! E se você o fizer colocá-la no namespace do pacote Rmprf de tal sorte que o uso dela a ativasse. HTH -- Cesar Rabak PS.: Não entro na seara, neste post, se faz sentido fazer um teste de Shapiro para números dessa magnitude. On Mon, Dec 12, 2016 at 11:12 AM, Luiz Leal via R-br < r-br@listas.c3sl.ufpr.br> wrote:
Muito obrigado pela sugestão, mas ocorreu outro problema
library(Rmpfr) p <- mpfr(c(500,600,700)^(-10), precBits=255) - mpfr(1,precBits=255) shapiro.test(p) Erro: is.numeric(x) is not TRUE shapiro.test(as.numeric(p)) Erro em shapiro.test(as.numeric(p)) : all 'x' values are identical
Há como solucionar?
Desde já gradeço
Luiz
On Saturday, December 10, 2016 10:25 PM, salah via R-br < r-br@listas.c3sl.ufpr.br> wrote:
segue sugestão
library(Rmpfr)
mpfr(500^(-10), precBits = 255) - mpfr(1, precBits = 255) # 1 'mpfr' number of precision 255 bits # [1] -0.999999999999999999999999998975999999999999914663505297831951 000646311908486498
## caracteristica numerica da maquina .Machine
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia ) e fornea cdigo mnimo reproduzvel.
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

Caro Luiz O Cesar Rabak já lhe deu uma excelente dica de leitura Compreenda qual o limite de representação numérica da sua máquina Experimente os limites da sua máquina Estude as bibliotecas gmp e Rmpfr https://en.wikipedia.org/wiki/Floating_point options(digits = 22) .Machine ## as.numeric("14472334024676221") # [1] 14472334024676220 ## se sua máquina representasse esse número, não seria necessário usar a biblioteca Rmpfr as.numeric("-0.999999999999999999999999998975999999999999914663505297831951000646311908486498") # [1] -1 ## epsilon da maquina eps = 1 while(eps + 1 > 1){eps = eps/2} (eps = eps*2) ## 1 - 0.00000000000000001 1 - 0.0000000000000001 p <- mpfr(c(500,600,700)^(-10), precBits=255) - mpfr(1,precBits=255) class(p) str(p) bons estudos!

all.equal(500^(-10), 0) Leonardo Ferreira Fontenelle[1] Em Sex 9 dez. 2016, às 23:38, Luiz Leal via R-br escreveu:
Boa noite a todos.
Há alguma forma de trabalhar com números muito pequenos no R?
O cálculo abaixo não é exatamente igual a -1. É muito próximo, mas não igual. Há alguma forma de realizar esse cálculo?
Abs
Luiz
500^(-10)
[1] 1.024e-27
500^(-10)-1
[1] -1
_________________________________________________
R-br mailing list
R-br@listas.c3sl.ufpr.br
Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
Links: 1. http://lattes.cnpq.br/9234772336296638
participantes (4)
-
Cesar Rabak
-
Leonardo Fontenelle
-
Luiz Leal
-
salah