# Decode dispersion — the min/max behind every published median

Derived from the run records in `runs/`; nothing was re-run. Each cell is
**median (min–max, n)** in tok/s over that arm's scored runs (the warmup is discarded
before any statistic is taken).

**The rule for the spread column, stated:** spread here is **(max − min) as a percentage
of that cell's median** — not of its minimum. Dividing by the minimum instead gives 6.25%
for the widest cell rather than 6.0%, and a reader who reconciles the two will think the
table is wrong. See `counting-rules.md`, rule 5.

| model | server (128G ECC) | Rig B laptop | mini PC (32G) |
|---|---|---|---|
| `qwen3.5:9b` | 13.59 (13.56–13.60, n=5) | 7.45 (7.39–7.52, n=5) | 9.11 (8.93–9.11, n=5) |
| `gemma4:12b` | 10.98 (10.89–11.03, n=5) | 4.95 (4.94–4.96, n=5) | 5.95 (5.94–5.95, n=5) |
| `phi4:14b` | 11.09 (10.62–11.28, n=5) | 4.41 (4.41–4.42, n=5) | 5.20 (5.14–5.39, n=5) |
| `mistral-small3.2:24b` | 7.09 (7.03–7.16, n=5) | 2.70 (2.70–2.70, n=5) | 3.31 (3.21–3.37, n=5) |
| `gemma4:26b` | 24.68 (24.49–24.78, n=5) | 13.26 (13.25–13.32, n=5) | 12.66 (12.53–13.15, n=5) |
| `nemotron-3.5-lightning:30b-a3b` | 31.47 (31.22–31.89, n=5) | 15.35 (15.32–15.41, n=5) | 14.61 (13.93–14.63, n=5) |
| `llama3.3:70b` | 2.70 (2.70–2.71, n=3) | not run | not run |

### Spread as a percentage of the median

| model | server (128G ECC) | Rig B laptop | mini PC (32G) |
|---|---|---|---|
| `qwen3.5:9b` | 0.3% | 1.7% | 2.0% |
| `gemma4:12b` | 1.2% | 0.4% | 0.1% |
| `phi4:14b` | 6.0% | 0.2% | 4.9% |
| `mistral-small3.2:24b` | 1.9% | 0.1% | 4.8% |
| `gemma4:26b` | 1.2% | 0.5% | 4.9% |
| `nemotron-3.5-lightning:30b-a3b` | 2.1% | 0.6% | 4.8% |
| `llama3.3:70b` | 0.2% | — | — |

**Tightest cell** 0.1% (`mistral-small3.2:24b`, cpu-laptop). **Widest cell** 6.0% (`phi4:14b`, cpu-server). Median cell spread 1.2% across 19 cells; 18/19 cells are within 5%.
