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