Errores aritméticos en Haskell y en Lisp
La primera vez que uno se encuentra con los siguientes cálculos aritméticos en Haskell puede sorprenderse.
1 2 3 4 5 6 7 8 9 10 |
~> ghci GHCi, version 6.12.1: http://www.haskell.org/ghc/ ghci> 1.1 == 1.1 True ghci> 1.1+1.1 == 2.2 True ghci> 1.1+1.1+1.1 == 3.3 False ghci> 2.2+1.1 == 3.3 False |
El mismo comportamiento se da en Common Lisp
1 2 3 4 5 6 7 8 9 10 11 |
~> clisp Welcome to GNU CLISP 2.44.1 (2008-02-23) <http://clisp.cons.org/> [1]> (= 1.1 1.1) T [2]> (= (+ 1.1 1.1) 2.2) T [3]> (= (+ 1.1 1.1 1.1) 3.3) NIL [4]> (= (+ 1.1 2.2) 3.3) NIL |
Para comprender estos cálculos es aconsejable leer What Every Computer Scientist Should Know About Floating-Point Arithmetic.