Hola, Alguien entiende porqué se redondea esto asi: round( 20.435, 2 ) [1] 20.43 Y sin embargo: round( 40.435, 2 ) [1] 40.44 Gracias! Patricia [[alternative HTML version deleted]]
No es R ni round. Pasa siempre que utilizas máquinas de precisión finita. Dice la Wikipedia: De esta forma, con un número dado de dígitos representativos se obtiene mayor precisión que con la coma fija, debido a que el valor de estos dígitos es siempre significativo sea el que sea el orden de magnitud del número a representar. Debido a esta adaptación, permite representar un rango mucho mayor de números (determinado por los valores límite que puede tomar el exponente). La "precisión" a la que se almacena x tiene que ver con el tamaño de x. Si a x le restas x-epsilon y epsilon es como de costumbre, el resultado, epsilon, tendrá un error grande. Un saludo, Carlos J. Gil Bellosta http://www.datanalytics.com El día 10 de diciembre de 2009 18:34, Usuario R <r.user.spain en gmail.com> escribió:> Hola, > > Alguien entiende porqué se redondea esto asi: > > round( 20.435, 2 ) > [1] 20.43 > > Y sin embargo: > > round( 40.435, 2 ) > [1] 40.44 > > Gracias! > > Patricia > > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > >
---------- Mensaje reenviado ---------- De: Hernan Olivera <lholivera en gmail.com> Fecha: 10 de diciembre de 2009 15:56 Asunto: Re: [R-es] ¿Qué hace round exactamente? Para: "Carlos J. Gil Bellosta" <gilbellosta en gmail.com> El día 10 de diciembre de 2009 15:38, Carlos J. Gil Bellosta <gilbellosta en gmail.com> escribió:> No es R ni round. Pasa siempre que utilizas máquinas de precisión > finita. Dice la Wikipedia: > > De esta forma, con un número dado de dígitos representativos se > obtiene mayor precisión que con la coma fija, debido a que el valor de > estos dígitos es siempre significativo sea el que sea el orden de > magnitud del número a representar. Debido a esta adaptación, permite > representar un rango mucho mayor de números (determinado por los > valores límite que puede tomar el exponente). > > La "precisión" a la que se almacena x tiene que ver con el tamaño de > x. Si a x le restas x-epsilon y epsilon es como de costumbre, el > resultado, epsilon, tendrá un error grande. > > Un saludo, > > Carlos J. Gil Bellosta > http://www.datanalytics.com > > > El día 10 de diciembre de 2009 18:34, Usuario R > <r.user.spain en gmail.com> escribió: >> Hola, >> >> Alguien entiende porqué se redondea esto asi: >> >> round( 20.435, 2 ) >> [1] 20.43 >> >> Y sin embargo: >> >> round( 40.435, 2 ) >> [1] 40.44 >> >> Gracias! >> >> Patricia >> >> [[alternative HTML version deleted]] >> >> >> _______________________________________________ >> R-help-es mailing list >> R-help-es en r-project.org >> https://stat.ethz.ch/mailman/listinfo/r-help-es >> >> > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >De todos modos no parece haber justificación en la cantidad de bits significativos de la representacion entre 40.435 y 20.435. En verdad es un resultado extraño, no esperable, y no debería suceder. Justamente se supone que la definición de round deberia ayudar a definir bien estos resultados. Habría que indagar en la representación interna de los datos en R, la definición de round en R, etc. para dar una respuesta correcta. saludos -- Hernan Olivera -- Hernan Olivera
Bueno, ?round dice: Note that for rounding off a 5, the IEC 60559 standard is expected to be used, ?_go to the even digit_?. Therefore ?round(0.5)? is ?0? and ?round(-1.5)? is ?-2?. However, this is dependent on OS services and on representation error (since e.g. ?0.15? is not represented exactly, the rounding rule applies to the represented number and not to the printed number, and so ?round(0.15, 1)? could be either ?0.1? or ?0.2?). Así que, en realidad, "round" no hace nada distinto de lo que anuncia en su documentación. Un saludo, Carlos J. Gil Bellosta El día 10 de diciembre de 2009 19:57, Hernan Olivera <lholivera en gmail.com> escribió:> ---------- Mensaje reenviado ---------- > De: Hernan Olivera <lholivera en gmail.com> > Fecha: 10 de diciembre de 2009 15:56 > Asunto: Re: [R-es] ¿Qué hace round exactamente? > Para: "Carlos J. Gil Bellosta" <gilbellosta en gmail.com> > > > El día 10 de diciembre de 2009 15:38, Carlos J. Gil Bellosta > <gilbellosta en gmail.com> escribió: >> No es R ni round. Pasa siempre que utilizas máquinas de precisión >> finita. Dice la Wikipedia: >> >> De esta forma, con un número dado de dígitos representativos se >> obtiene mayor precisión que con la coma fija, debido a que el valor de >> estos dígitos es siempre significativo sea el que sea el orden de >> magnitud del número a representar. Debido a esta adaptación, permite >> representar un rango mucho mayor de números (determinado por los >> valores límite que puede tomar el exponente). >> >> La "precisión" a la que se almacena x tiene que ver con el tamaño de >> x. Si a x le restas x-epsilon y epsilon es como de costumbre, el >> resultado, epsilon, tendrá un error grande. >> >> Un saludo, >> >> Carlos J. Gil Bellosta >> http://www.datanalytics.com >> >> >> El día 10 de diciembre de 2009 18:34, Usuario R >> <r.user.spain en gmail.com> escribió: >>> Hola, >>> >>> Alguien entiende porqué se redondea esto asi: >>> >>> round( 20.435, 2 ) >>> [1] 20.43 >>> >>> Y sin embargo: >>> >>> round( 40.435, 2 ) >>> [1] 40.44 >>> >>> Gracias! >>> >>> Patricia >>> >>> [[alternative HTML version deleted]] >>> >>> >>> _______________________________________________ >>> R-help-es mailing list >>> R-help-es en r-project.org >>> https://stat.ethz.ch/mailman/listinfo/r-help-es >>> >>> >> >> _______________________________________________ >> R-help-es mailing list >> R-help-es en r-project.org >> https://stat.ethz.ch/mailman/listinfo/r-help-es >> > > > De todos modos no parece haber justificación en la cantidad de bits > significativos de la representacion entre 40.435 y 20.435. En verdad > es un resultado extraño, no esperable, y no debería suceder. > Justamente se supone que la definición de round deberia ayudar a > definir bien estos resultados. Habría que indagar en la representación > interna de los datos en R, la definición de round en R, etc. para dar > una respuesta correcta. > > saludos > > -- > Hernan Olivera > > > > -- > Hernan Olivera > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >
Sin embargo, Carlos, he probado con OpenOffice y encuentro: A1: =REDONDEAR(20.435;2) A1: 20.44 A2: =REDONDEAR(40.435;2) A2: 40.44 El sistema operativo es el mismo y los recursos del sistema por tanto también. Estoy seguro que los que hemos probado el ejemplo de Patricia lo hemos hecho en diferentes SO. > round( 20.435, 2 ) [1] 20.43 > round(40.435, 2) [1] 40.44 Independientemente de que haya una dificultad que viene dada por el sistema de representación interna de los números, es evidente que hay algo que "round" no está haciendo bien y sin embargo un software menos pensado para el cálculo intensivo como OpenOffice ha resuelto. Estoy con Hernán Olivera: "Houston, tenemos un problema". Saludos. Carlos J. Gil Bellosta escribió:> Bueno, ?round dice: > > Note that for rounding off a 5, the IEC 60559 standard is expected > to be used, ‘_go to the even digit_’. Therefore > ‘round(0.5)’ is ‘0’ and ‘round(-1.5)’ is ‘-2’. > However, this is dependent on OS services and on representation > error (since e.g. ‘0.15’ is not represented exactly, the > rounding rule applies to the represented number and not to the > printed number, and so ‘round(0.15, 1)’ could be either > ‘0.1’ or ‘0.2’). > > Así que, en realidad, "round" no hace nada distinto de lo que anuncia > en su documentación. > > Un saludo, > > Carlos J. Gil Bellosta > > El día 10 de diciembre de 2009 19:57, Hernan Olivera > <lholivera@gmail.com> escribió: > >> ---------- Mensaje reenviado ---------- >> De: Hernan Olivera <lholivera@gmail.com> >> Fecha: 10 de diciembre de 2009 15:56 >> Asunto: Re: [R-es] ¿Qué hace round exactamente? >> Para: "Carlos J. Gil Bellosta" <gilbellosta@gmail.com> >> >> >> El día 10 de diciembre de 2009 15:38, Carlos J. Gil Bellosta >> <gilbellosta@gmail.com> escribió: >> >>> No es R ni round. Pasa siempre que utilizas máquinas de precisión >>> finita. Dice la Wikipedia: >>> >>> De esta forma, con un número dado de dígitos representativos se >>> obtiene mayor precisión que con la coma fija, debido a que el valor de >>> estos dígitos es siempre significativo sea el que sea el orden de >>> magnitud del número a representar. Debido a esta adaptación, permite >>> representar un rango mucho mayor de números (determinado por los >>> valores límite que puede tomar el exponente). >>> >>> La "precisión" a la que se almacena x tiene que ver con el tamaño de >>> x. Si a x le restas x-epsilon y epsilon es como de costumbre, el >>> resultado, epsilon, tendrá un error grande. >>> >>> Un saludo, >>> >>> Carlos J. Gil Bellosta >>> http://www.datanalytics.com >>> >>> >>> El día 10 de diciembre de 2009 18:34, Usuario R >>> <r.user.spain@gmail.com> escribió: >>> >>>> Hola, >>>> >>>> Alguien entiende porqué se redondea esto asi: >>>> >>>> round( 20.435, 2 ) >>>> [1] 20.43 >>>> >>>> Y sin embargo: >>>> >>>> round( 40.435, 2 ) >>>> [1] 40.44 >>>> >>>> Gracias! >>>> >>>> Patricia >>>> >>>> [[alternative HTML version deleted]] >>>> >>>> >>>> _______________________________________________ >>>> R-help-es mailing list >>>> R-help-es@r-project.org >>>> https://stat.ethz.ch/mailman/listinfo/r-help-es >>>> >>>> >>>> >>> _______________________________________________ >>> R-help-es mailing list >>> R-help-es@r-project.org >>> https://stat.ethz.ch/mailman/listinfo/r-help-es >>> >>> >> De todos modos no parece haber justificación en la cantidad de bits >> significativos de la representacion entre 40.435 y 20.435. En verdad >> es un resultado extraño, no esperable, y no debería suceder. >> Justamente se supone que la definición de round deberia ayudar a >> definir bien estos resultados. Habría que indagar en la representación >> interna de los datos en R, la definición de round en R, etc. para dar >> una respuesta correcta. >> >> saludos >> >> -- >> Hernan Olivera >> >> >> >> -- >> Hernan Olivera >> >> _______________________________________________ >> R-help-es mailing list >> R-help-es@r-project.org >> https://stat.ethz.ch/mailman/listinfo/r-help-es >> >> > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >[[alternative HTML version deleted]]