Es bastante común que algunas fracciones decimales simples
como 0.1 o 0.7 no puedan
ser convertidas a su representación binaria interna sin
perder un poco de precisión. Esto puede llevar a
resultados confusos: por ejemplo,
floor((0.1+0.7)*10) usualmente
devolverá 7 en lugar del esperado
8 ya que el resultado de la
representación interna es en realidad algo como
7.9999999999....
Esto se encuentra relacionado al hecho de que es imposible
expresar de forma exacta algunas fracciones en notación
decimal con un número finito de dígitos. Por
ejemplo, 1/3 en forma decimal se convierte en
0.3333333. . ..
Así que nunca confíe en resultados de
números flotantes hasta el último dígito, y
nunca compare números de punto flotante para conocer si
son equivalentes. Si realmente necesita una mejor
precisión, es buena idea que use las funciones matemáticas de precisión
arbitraria o las funciones gmp en su lugar.
|