BALL SIZER16161616ERROR %00000MB MODEL

Comb slot = storable valueBall = one weightDashed ring = true valueWhisker = rounding errorHighlighted ball = outlierNeedle = average errorPost number = weights per scaleGang bar up = row-wide scaleTop panel = bytes, GB vs 5090A ball sorter: each ball is a weight, each slot a value the format can store. Fewer bits mean wider slots, more error. One outlier widens its block.Each weight is stored as a small code plus a shared scale. Each lane is one block: its micrometer sets the scale so the comb spans the block's largest ball, and every weight rounds to the nearest bin; the dashed ring marks its true value and the whisker the rounding error, and the gauge reads the RMS of those errors over all 4,096 weights. All lanes share one value axis in σ, linear to ±4σ and squeezed beyond, so a wider scale shows as wider, fewer slots. The number on each lane's post is the block size; for one scale per row the gang bar rises against all four micrometers. FP32 stores each weight in 4 bytes and FP16 in 2: the 8B example falls from 32.1 GB to 16.1 GB, and because decode reads every weight once per token it runs about twice as fast, while the rounding error stays below 0.1% of σ. Fewer bits means fewer, coarser bins (16 for 4-bit, 256 for 8-bit), a smaller model and fewer bytes to read per token, so faster decode, at the price of rounding error. The bit count includes the scales: INT4 with one scale per 16 weights reads 6.00 bits, not 4, because a 16-bit scale and a 16-bit zero point are stored for every 16 weights (4 + 32 ÷ 16 = 6); with 128-weight blocks the same cost is 4.25 bits. Turn on the outlier and its lane's comb must stretch to reach it, crowding the other weights of that block into the few middle bins; one scale for a whole 4,096-weight row (FP8, INT8 per-channel) lets one outlier coarsen every lane, while NVFP4's 16-weight blocks confine the damage. The error is computed live on a fixed seeded sample of 4,096 Gaussian weights with each format's real arithmetic: symmetric absmax for INT8 and INT4, the FP4 E2M1 grid {0, 0.5, 1, 1.5, 2, 3, 4, 6} with an E4M3 scale per 16 (NVFP4) or a power-of-two scale per 32 (MXFP4), asymmetric 4-bit with 6-bit sub-scales and mins (the Q4_K tensors of Q4_K_M, with plain min/max where llama.cpp searches for slightly better scales), signed 3-bit with 6-bit sub-scales (Q3_K). IQ2_XS really uses an E8-lattice codebook over groups of 8; it is drawn as a plain 2-bit grid, so its error here is an upper bound. Speed assumes decode reads every weight once per token at 70% of an RTX 5090's 1,792 GB/s.