[R-es] Fwd: ¿Qué hace round exactamente?

Carlos J. Gil Bellosta gilbellosta en gmail.com
Vie Dic 11 13:43:25 CET 2009


Hola, ¿qué tal?

No sé mucho de C, pero creo que no estaría de más echar un vistazo al
código de R, Octave (que se comporta de manera distinta a R) y
OpenOffice.

La comunidad de desarrolladores de Octave ya ha discutido la cuestión
(lo vi buscando por Google).

Aparentemente, distintos compiladores ofrecen distintos resultados con
los valores int+0.5 si se usan las funciones de redondeo de C. No sé
si desde el código de R se podría controlar este comportamiento y no
hacerlo depender de las peculiaridades del compilador o la máquina (de
cualquier compilador en cualquier sistema, dado que los usuarios
pueden compilar su propio código).

Si alguien quiere anunciar el "bug" en R-dev y enfrentarse a la furia
de Ripley...

En cualquier caso, pienso (y es opinión personal) que por el mismo
motivo que no se debe usar "==" para comparar "floats", no se debe
hacer descansar la validez de un algoritmo en el comportamiento de una
función discontinua sobre los reales en sus puntos de discontinuidad.

Un saludo,

Carlos J. Gil Bellosta
http://www.datanalytics.com




El día 11 de diciembre de 2009 11:49,
<miguel.angel.rodriguez.muinos en sergas.es> escribió:
> Hola a tod en s.
>
> Veamos... Intentaré dar mi visión del asunto...
>
> Según reza en la propia ayuda del "round()"....
>
> ==================================================================
> 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').
> ==================================================================
>
> Esto es lo que yo entiendo.....
> Si tenemos un número, por ejemplo pongamos el 20,435 ... Realmente R no utiliza "exactamente" ese número porque no puede ser representado "exactamente" como una "fracción simple (binaria)"... Realmente está tomando el 20,43499999... Por lo que el round() lo hace al 20,43 (con precisión de 2 dígitos).
>
> Como leí por ahí... "One always needs to keep in mind that computers do not do arithmetic exactly"
>
> Un saludo,
> Miguel.
>
>
>
>
> -----Mensaje original-----
> De: r-help-es-bounces en r-project.org [mailto:r-help-es-bounces en r-project.org] En nombre de Pepe Trujillo
> Enviado el: viernes, 11 de diciembre de 2009 10:16
> Para: Carlos J. Gil Bellosta
> CC: r-help-es en r-project.org
> Asunto: Re: [R-es] Fwd: ¿Qué hace round exactamente?
>
> 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.
>
>
>
>
>
>
>
> Nota: A información contida nesta mensaxe e os seus posibles documentos adxuntos é privada e confidencial e está dirixida únicamente ó seu destinatario/a. Se vostede non é o/a destinatario/a orixinal desta mensaxe, por favor elimínea. A distribución ou copia desta mensaxe non está autorizada.
>
> Nota: La información contenida en este mensaje y sus posibles documentos adjuntos es privada y confidencial y está dirigida únicamente a su destinatario/a. Si usted no es el/la destinatario/a original de este mensaje, por favor elimínelo. La distribución o copia de este mensaje no está autorizada.
>
> See more languages: http://www.sergas.es/aviso_confidencialidad.htm
>
> XACOBEO 2010: http://www.xacobeo.org
>
>



Más información sobre la lista de distribución R-help-es