10Pines / pdepreludat

BSD 3-Clause "New" or "Revised" License
24 stars 2 forks source link

Problemas con los decimales #16

Closed matifreyre closed 4 years ago

matifreyre commented 4 years ago

Consultar esto en una terminal:

*Library Library> sum [0.1,0.4,0.2,0.1]
0.7999999999999999

Eso hace que falle, por ejemplo:

*Library Library> even . (10*) .sum $ [0.1,0.4,0.2,0.1]
*** Exception: Se esperaba un valor entero pero se pasó uno con decimales
CallStack (from HasCallStack):
  error, called at src\Number.hs:11:39 in pdeprelude-0.2.0.0-HW3vOnRVEsIAEq5rLh4iQT:Number

Esa cuenta debería dar 8, y even no debería tener problemas, pero da 7.999999999999999 y rompe el uso de even.

matifreyre commented 4 years ago

Más acotado:

*Library Library> 0.1
0.1
*Library Library> 0.7
0.7
*Library Library> 0.7 + 0.1
0.7999999999999999
*Library Library> 0.2 + 0.1
0.30000000000000004
*Library Library> 0.2 + 0.2
0.4
*Library Library> 0.2 + 0.3
0.5
*Library Library> 0.2 + 0.4
0.6000000000000001
*Library Library> 0.2 + 0.5
0.7
*Library Library> 0.2 + 0.6
0.8
*Library Library> 0.3 + 0.3
0.6
JuanFdS commented 4 years ago

Ohhh. Hay un par de cosas que se podrían pensar, con sus pros y sus contras:

Más allá de eso, estoy replanteandome si juntar enteros y decimales en un solo tipo es una buena idea o no en un lenguaje como Haskell :thinking:, vos que opinas? @fdodino, el año que viene podemos volver a iterar esto a ver si queremos seguir por acá o volvemos a separar en dos tipos y hacer más friendly la conversión entre ambos.

fdodino commented 4 years ago

Yo hasta ahora estaba muy feliz en mi mundo de Numbers. La solución de redondear es la que más me tienta, tener dos tipos para Int y Float en PDP me sigue pareciendo una idea mala...