Adding Floating-Point Decimals for Fun and Profit
Many people know that you shouldn’t do decimal calculations, such as those involving U.S. dollars and cents, with the floating-point numbers in most programming languages. This is because decimal numbers can’t be expressed exactly as such floating-point numbers, so you will encounter rounding errors. Famously, with IEEE double-precision floats, 0.1 + 0.2 is not 0.3, but rather, 0.30000000000000004. On the other hand, I use a Python REPL to add up decimal numbers for receipts all the time. Of course, my stakes are lower; I’m summing things in the $1–$100 range and know to manually round the microscopic errors off before copying the sum somewhere. But actually it’s quite often that those errors don’t appear at all. If we sum every pair of multiples of 0.01 up to 1.00 and look at whether the printed result is too large (blue), too small (red), or correct, we get a cool pattern: Figure 1: How floating-point affects summing two multiples of 0.01, up to 1.00 Where does this pattern come from?
2026-08-30 (2527 words) filed under Math, CS Many people know that you shouldn’t do decimal calculations, such as those involving U.S. dollars and cents, with the floating-point numbers in most programming languages. This is because decimal numbers can’t be expressed exactly as such floating-point numbers, so you will encounter rounding errors. Famously, with IEEE double-precision floats, 0.1 + 0.2 is not 0.3, but rather, 0.30000000000000004. On the other hand, I use a Python REPL to add up decimal numbers for receipts all the time. Of course, my stakes are lower; I’m summing things in…
saved by
related reading
- 練習 - 探索浮點類型 - Training | Microsoft Learnlearn.microsoft.com
- Floating point from scratch: Hard Mode · Tales on the wireessenceia.github.io
- There are Only Four Billion Floats-So Test Them All! | Random ASCII – tech blog of Bruce Dawsonrandomascii.wordpress.com
- 1. Introduction — Floating Point and IEEE 754 13.3 documentationdocs.nvidia.com
- Ken Shirriff's blogrighto.com
- William Kahanen.wikipedia.org
- Implementing High-Precision Decimal Arithmetic with CUDA int128 | NVIDIA Technical Blogdeveloper.nvidia.com
- Python Gotcha: Comparisons - Andrew Wegnerandrewwegner.com
- The 4-bitter Lesson | humans&humansand.ai
- Schanuel’s conjecture and the semantics of FPSan | Complex Projective 4-Spacecp4space.hatsya.com
- The Universe of Discourseblog.plover.com
- Quantization effects in digital filtersll.mit.edu