7

I was testing some of my code, in javascript I added .1+.2 and it gives me .30000000000000004 instead of .3 . I don't understand this. But when I added .1+.3 it gives me .4. I googled it and find its something about Double Precision addition. But I don't know what it is.

Vaibhav Jain
  • 33,887
  • 46
  • 110
  • 163

3 Answers3

14

Here's the obligatory link: What Every Computer Scientist Should Know About Floating-Point Arithmetic

Basically, there are many base 10 numbers that cannot be exactly represented in the floating point format used by most computers, so you'll get issues like the ones you highlight.

sje397
  • 41,293
  • 8
  • 87
  • 103
  • 2
    :) I think I've read 20% of it a hundred times...one day I'll be able to stay awake. – sje397 May 23 '11 at 06:28
  • its a big article, can you tell me the essence if you have read it. – Vaibhav Jain May 25 '11 at 08:58
  • 1
    @vaibhav: I thought I had. Some numbers can't be written in a fixed number of decimal places (e.g. 1/3), in base 10. In base 2 (which is how it's stored in the computer) floating point format, there are also numbers that can't be written (or stored) in a fixed number of decimal places..and they aren't always the same as the ones in base 10. So you can't help but have these sorts of errors. – sje397 May 26 '11 at 05:37
2

If you can't stay awake for What Every Computer Scientist Should Know About Floating-Point Arithmetic, try instead the javascript-specific Rounding in JavaScript.

RobG
  • 142,382
  • 31
  • 172
  • 209
1

Floating point numbers have a finite amount of precision, as the number is stored in a finite number of bits.

The number you are trying to store can't be stored accurately, so an approximation is used.

What Every Computer Scientist Should Know About Floating-Point Arithmetic .

alex
  • 479,566
  • 201
  • 878
  • 984