2011-10-28 15 views
5

¿alguien puede explicar por qué esto da diferentes resultados?R explicación de redondeo

round(1.49999999999999) 
1 


round(1.4999999999999999) 
2 

He leído la documentación redonda, pero no menciona nada al respecto. Sé que R representa los números en forma binaria, pero ¿por qué agregar dos números extra 9 cambia el resultado?

Gracias.

+0

Ver [esta respuesta] [1] acerca de los problemas en R. [1]: http://stackoverflow.com/questions/1535021/whats-the-biggest-r-gotcha-youve- run-across/3398868 # 3398868 – John

Respuesta

7

1.4999999999999999 no se puede representar internamente, por lo que se redondea a 1.5.

Ahora, cuando aplica round(), el resultado es 2.

+0

Gracias, R puede dar algunos resultados extraños con decimales a veces. – user557240

+5

@ user557240 No hay nada de particular en R a este respecto. – joran

2

Ponga esos dos números en una variable y luego imprímalo; verá que son diferentes.

Informática no almacena este tipo de números con este valor exacto, (No utilizan números decádicos internaly)

+1

Será mejor que establezca 'options (digits = 20)' antes de imprimirlos, o ** se verán ** idénticos –

+0

Como se indicó en otras respuestas - el 1.4999999999999999 se almacena como 1.5 por lo que no obtendrá el mismo resultado! – Hurda

2

Nunca he usado R, así que no sé si este es el problema, pero en otros idiomas, como C/C++, un número como 1.4999999999999999 está representado por un flotador o un doble.

Dado que estos tienen precisión finita, no puede representar algo así como 1.499999999999999 exactamente. Podría ser el caso que 1.4999999999999999 en realidad se almacena como 1.50000000000000 en su lugar debido a limitaciones en la precisión de punto flotante.

+1

R usa aritmética de punto flotante IEEE, por lo que tiene los mismos problemas. –