Here's a preview from my zine, How Integers and Floats Work! If you want to see more comics like this, sign up for my saturday comics newsletter or browse more comics!
read the transcript!
floating point is weird
floating point 10.0 is not the same as the integer 10
10 (64-bit integer): 0x000000000000000a
10.0 (64-bit float): 0x4024000000000000
(what’s this 4024 doing???)
computer integers work almost exactly the way you’d expect
1 + 2 - 3 = 0
but floating point numbers don’t:
(0.1 + 0.2) - 0.3 = 0.0000000000000000555
checking for float equality is dangerous
if x == 0.3
: bad!
(0.1 + 0.2)
is not equal to 0.3
!
Instead, check if x is very close to 0.3, something like this:
if abs(x 0.3) 0.0000001:
in floating point, very large integers get rounded
For example: 10000000000000001.0 == 10000000000000000.0
(16 zeros)
(try comparing those 2 numbers in your favourite language! they’re the same!)
(x + y) + z is not the same as x + (y + z)
For example: (9007199254740992.0+ 1.0) 1.0 = 9007199254740991.0
(the math term for this problem is “floating point addition isn’t associative”)
some intuition for precision
32-bit floats have about 8 digits of precision
64-bit floats have about 16 digits of precision
Saturday Morning Comics!
Want another comic like this in your email every Saturday? Sign up here!