Skip to content

Significant figures

Level: 101 · for anyone who took a science class

One line: Rounding is the action; significant figures are the rule that decides where the action has to stop — and the rule for + is a different rule from the rule for ×, which is where almost everyone goes wrong.

Is this just rounding?

No, and the difference is the whole subject.

Rounding is a mechanical operation: cut a number at some place and adjust the last kept digit. You can round anything, anywhere, for any reason — to fit a column, to make a slide readable, because your boss likes whole numbers.

Significant figures are a claim about knowledge: they say how many of the digits in front of you came from an actual measurement rather than from the notation. They don't perform the cut. They tell you where the cut is mandatory, because past that point you would be inventing.

So: rounding is the knife. Significant figures are the argument for where to put it.

The distinction has a sharp consequence. You can round a number too much and lose information — everyone knows that. But you can also round a number too little, and that is the failure sig figs exist to prevent: writing 3,200,002 when you only ever knew 3,200,000 is not extra precision, it is a false statement about how good your instrument was.

The number on the blackboard

A population is reported as 3,200,000 people. Two of those digits are real — the 3 and the 2. The five zeros are placeholders holding the number in the millions; nobody counted them.

So the figure does not mean 3,200,000. It means:

3,150,000  ≤  the truth  <  3,250,000

An uncertainty of ±50,000 people. A town's worth of slack, in a single reported number, and that is the correct reading of it — not a criticism.

Now add two people.

The arithmetic is not in doubt: 3,200,000 + 2 = 3,200,002. But arithmetic was never the question. The question is what you know, and you know the population to the nearest hundred thousand. A window 100,000 wide cannot resolve a step of 2. The honest answer is still 3,200,000 — the two people are real, and they are invisible.

The 2 is exact, and it still doesn't help. Those two people were counted, so the number 2 is exact and carries no uncertainty of its own — see exact vs approximate. An exact addend can never degrade a result. What it also cannot do is improve one: the sum inherits the precision of its worst-known term, and the estimate is the worst-known term by five orders of magnitude.

What the program prints

Verified output of significant_figures.py — regenerated by tools/run_examples.py, never hand-typed.

1. WHAT THE NOTATION CLAIMS
   written        3,200,000 people   (as 3.2 x 10^6)
   sig figs       2
   really means   3,150,000 to 3,250,000
   uncertainty    +/- 50,000
   The five zeros are placeholders. They say 'millions', not 'zero'.

2. ADDING ONE PERSON TO A POPULATION ESTIMATE
   3,200,000 + 2 = 3,200,002 exactly. But 'exactly' is not the
   question -- the question is what you KNOW:
     known to the 100,000 place   (the estimate)
     known to the       1 place   (the 2 people, a count)
   The sum can be no better than the worse of the two, so it stops
   at the hundred-thousands place:
     Decimal('3.2E+6') + Decimal('2')  ->  3.2E+6
   The +2 is real, and it is invisible. A window 100,000 wide
   cannot resolve a step of 2.

3. COUNTING THEM
         47.3   3 s.f.   non-zero digits always count
         4007   4 s.f.   zeros BETWEEN digits count
       0.0052   2 s.f.   leading zeros never count
        5.200   4 s.f.   trailing zeros after a decimal point count
         2.54   3 s.f.   an ordinary measurement

   And the ambiguous case, which is why scientists stopped writing it:
      3200000   7 s.f.   as written, 7 s.f. -- claims 7 known digits
       3.2E+6   2 s.f.   2 s.f. -- no ambiguity, ever

4. MULTIPLY AND DIVIDE: FEWEST SIG FIGS WINS
     4.56 x 1.4 = 6.384        <- what a calculator shows
     inputs have 3 and 2 s.f., so the answer gets 2
     4.56 x 1.4 = 6.4           <- what you may claim

5. ADD AND SUBTRACT: PLACE VALUE WINS (not sig-fig count)
   This is the rule most people never learn, and it is a different rule.
     12.11 + 0.3 = 12.41         <- what a calculator shows
     12.11 is known to 10^-2, 0.3 only to 10^-1
     so the answer stops at 10^-1:  12.4
     note 12.11 has 4 s.f. and the answer has 3 --
     counting sig figs here would have given the wrong answer.

6. THE SAME DISTINCTION, IN PYTHON'S FORMAT SPEC
     f"{v:.2f}"   ->  3200002.00      2 DECIMAL PLACES (a fixed spot)
     f"{v:.2g}"   ->  3.2e+06         2 SIGNIFICANT FIGURES (relative)
     f"{w:.3g}"   ->  0.000123     3 s.f. -- correct
     f"{w:.3f}"   ->  0.000        3 d.p. -- the number is gone

Counting them

Rule Example Sig figs
Non-zero digits always count 47.3 3
Zeros between digits count 4007 4
Leading zeros never count 0.0052 2
Trailing zeros after a decimal point count 5.200 4
Trailing zeros in a bare whole number 3200000 ambiguous

That last row is the blackboard's problem. Written plainly, 3200000 claims seven known digits; in context it means two. Nothing in the notation distinguishes them, which is why scientific notation exists and why serious work uses it:

3.2 × 10⁶      exactly two significant figures, always, to everyone
3.200000 × 10⁶ exactly seven, if you really did measure that well

The mantissa carries the claim; the exponent carries the magnitude. They stop fighting over the same digits.

The two arithmetic rules are different rules

This is the part most courses compress into one sentence and most students therefore get wrong.

Multiplication and division — count sig figs. The answer gets the fewest significant figures of any input.

4.56 × 1.4 = 6.384      ← the calculator
           = 6.4        ← what you may claim (2 s.f., from the 1.4)

Addition and subtraction — forget sig figs, use place value. The answer stops at the leftmost "last known place" among the terms.

12.11 + 0.3 = 12.41     ← the calculator
            = 12.4      ← 12.11 is known to hundredths, 0.3 only to tenths

Note what just happened: 12.11 has 4 significant figures and the answer has 3. Counting sig figs would have given 12.4 too, by luck. But run it the other way — the blackboard's 3,200,000 + 2 — and counting gives a two-digit answer while place value gives the right one. The rules genuinely differ, and only place value is correct for + and .

The reason is not arbitrary. Multiplication propagates relative error (a 1% error in a factor is a 1% error in the product), while addition propagates absolute error (a ±50,000 term makes a ±50,000 sum). Significant figures are a relative measure; decimal places are an absolute one. Each rule uses the measure that matches the operation. The full version of that argument is uncertainty propagation.

The same distinction, in Python's format spec

Python encodes the rounding-vs-sig-figs split directly in its syntax, which makes it something you can try rather than memorise:

f"{3200002:.2f}"   # '3200002.00'  — 2 DECIMAL PLACES: a fixed spot on the number line
f"{3200002:.2g}"   # '3.2e+06'     — 2 SIGNIFICANT FIGURES: a relative precision

f rounds at a position. g keeps a quantity of meaning. On a small number the two stop being cousins entirely:

f"{0.000123456:.3g}"   # '0.000123'  — 3 significant figures: correct
f"{0.000123456:.3f}"   # '0.000'     — 3 decimal places: the number is gone

And decimal is the one place in the standard library where a precision claim survives arithmetic, because getcontext().prec counts significant digits rather than decimal places:

from decimal import Decimal, getcontext
getcontext().prec = 2
Decimal("3.2E+6") + Decimal("2")   # Decimal('3.2E+6')  — the blackboard, in one line

Set prec = 28 and the same expression returns Decimal('3200002'). The knob is significant figures, and it is the only arithmetic in Python that behaves the way the notation promises.

Where this stops being enough

Significant figures compress "how well do I know this?" into a digit count — one number where the honest answer needs two. That compression is lossy, and it is lossy in both directions: 1.0 and 9.9 are both two significant figures, but one is known to ±5% and the other to ±0.5%, a ten-fold difference the notation cannot express.

For a single measurement and a one-step calculation, that is fine and it is what the rules are for. Past that, carry the uncertainty explicitly: uncertainty propagation. And there is one operation that destroys significant figures faster than any rule anticipates — see catastrophic cancellation.

Run it yourself

From the root of your clone of this repository:

python3 01_Precision/significant_figures/examples/significant_figures.py

See also