floating point - Haskell: Unexpected output for expression [0, 0.1 .. 1] -


when evaluating expression:

*main> [0, 0.1 .. 1] 

i expecting:

 [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1] 

but quite shocked see output be

[0.0,0.1,0.2,0.30000000000000004,0.4000000000000001,0.5000000000000001,0.6000000000000001,0.7000000000000001,0.8,0.9,1.0] 

why haskell produce result upon evaluation?

this result of imprecision of floating point values, isn't particular haskell. if can't deal approximation inherent in floating point can use rational @ high performance cost:

> import data.ratio data.ratio> [0,1%10.. 1%1] [0 % 1,1 % 10,1 % 5,3 % 10,2 % 5,1 % 2,3 % 5,7 % 10,4 % 5,9 % 10,1 % 1] 

just hammer point home, here's python:

>>> 0.3 0.29999999999999999 

and here's c:

void main() { printf("%0.17f\n",0.3); }  $ gcc t.c 2>/dev/null ; ./a.out 0.29999999999999999 

Comments

Popular posts from this blog

apache - Add omitted ? to URLs -

redirect - bbPress Forum - rewrite to wwww.mysite prohibits login -

php - How can I stop spam on my custom forum/blog? -