Science Journaling Club Founded 2024

INTERACTIVE COMPANION · WINTER 2025 · STATISTICAL PHYSICS

The Percolation Bench

A live model accompanying “Measuring a Universal Constant on a Laptop”

← Read the full article

One number holds this page together: 0.59274605. Fill the cells of a square grid at random and below that density you get islands. Above it you get a path from the top edge to the bottom. The constant has no closed form, so the only way anyone knows it is by measuring, and both models here measure rather than look it up.

The first bench is a lattice you can fill by hand. The second is the club's actual measurement procedure, running live in your browser, with the same arithmetic the article used.

Model 1. The lattice itself

Each cell is occupied independently with probability \(p\). Occupied cells that share an edge belong to the same cluster, and the drawing colours clusters by size, palest for the smallest. If some cluster reaches from the top row to the bottom row, the lattice spans and that cluster is drawn in the darkest ink.

Drag the occupation slider slowly through the high fifties. There is no fanfare at the threshold, which is the honest lesson: at any single finite lattice size the transition is a smooth ramp, and the sharp constant only exists in the limit.

occupied cells: largest cluster: as a fraction of the lattice: spans top to bottom:

Model 2. The measurement run

This is the club's procedure, not a cartoon of it. Each trial is one Newman-Ziff sweep: shuffle all \(L^2\) sites, add them one at a time with a union-find, and record the occupancy at which the lattice first spans. The crossing curve is then rebuilt from those records by exact binomial convolution,

$$R_L(p) \;=\; \sum_{n} \binom{N}{n} p^{n}(1-p)^{N-n}\,P(n_{\mathrm{span}} \le n),$$

and \(p^*(L)\) is the value of \(p\) where that curve crosses one half. The curve you see fills in as the trials accumulate, and the error bar on \(p^*\) shrinks with it.

Underneath, the finite-size fit \(p^*(L) = p_c + a L^{-1/\nu}\) runs on the club's published table. At the default settings it reproduces the article's headline exactly: \(p_c = 0.5928171\), slope \(a = -0.007456\), chi square 2.41 on 4 degrees of freedom.

trials done: 0 p*(L) live: fitted p_c: vs accepted:
Club estimate
p_c = 0.5928171 ± 0.0001110
Accepted value
0.59274605 (Jacobsen 2014)
Difference
+0.0000710, which is +0.64 of the club's error bar
Slope of the fit
a = −0.007456, chi square 2.41 on 4 d.o.f.
With L = 16 included
0.5930250, a tighter bar and 2.92 sigma out
Total cost
114,520 sweeps, 526.5 seconds, one laptop

What to try, and what it will teach you

Set the smallest lattice in the fit to \(L \ge 16\). The intercept jumps to 0.5930250 and the quoted error bar gets smaller, because adding a point always tightens a least-squares intercept whether or not the point belongs there. The chi square jumps to 18.04. This is the single most useful thing on the page: a number that looks more precise and is further from the truth, with the fit itself telling you so if you bother to read it.

Then set the live lattice to 16 with 200 trials, switch the fit to use the live run, and watch what one badly sampled point does to a six-point fit. Then raise the trials to 6,000 and watch it settle back. The error bar you are watching is not decoration.

Last, drag the exponent. The intercept barely moves, and that is the honest limitation the article states in §9: this data set constrains the threshold and says almost nothing about the correlation-length exponent, because \(p_c\) is an intercept and \(\nu\) only reshapes the approach to it.