When a magnetic moment is sent through an inhomogeneous field, can it point any direction — a continuous smear on the detector — or only a discrete set of directions? And can the size of the atomic moment be read straight off the deflection, without ever assuming it?
Units: J/T (Bohr magneton μ_B)
▶ Run this simulationRead how it works
Space is quantized: a silver beam splits into exactly TWO spots (s = ½), and its deflection recovers the Bohr magneton μ_B = (9.329 ± 0.010)×10⁻²⁴ J/T (Stern–Gerlach 1922)
Forward-model a velocity-selected beam of silver atoms (one unpaired 5s electron ⇒ net moment ≈ one Bohr magneton) through a field gradient G = ∂B_z/∂z = 1800 T/m over a magnet of length L = 35 mm, then a drift D = 100 mm to the detector. The force on a moment is F_z = μ_z·G, so each atom deflects by z = μ_z·G·L·(L/2+D)/(M v²). Two populations of 4000 atoms are simulated per seed: QUANTUM (μ_z = g_s·m_s·μ_B, m_s = ±½) and a CLASSICAL isotropic control (μ_z = μ_B·cosθ, cosθ uniform on [−1,1]), both with a ±4% velocity passband and 0.05 mm detector noise. The atomic moment is recovered BLIND from the mean deflection, μ_z = ⟨|z|⟩·M·v₀²/(G·L·(L/2+D)) — a formula using only the beam speed v₀ = √(2kT/M) and the geometry; μ_B and g_s enter only the simulated atoms and the final scoring, never the fit. Swept across 24 seeds for an uncertainty.
z = μ_z·G·L·(L/2+D)/(M v²); |μ_z| = (g_s/2)μ_B ≈ μ_B (quantum, two values) vs μ_B·cosθ (classical, a continuum)
1.0100e-26
0.00767
Stern & Gerlach's 1922 result (O. Stern, Nobel 1943): the first direct proof of space quantization. Validates a textbook result — a silver beam through a field gradient splits into exactly TWO spots (2s+1 = 2 ⇒ spin s = ½), and the atomic moment read off the mean deflection is one Bohr magneton, μ_B = (9.329 ± 0.010)×10⁻²⁴ J/T, recovered to +0.6% without μ_B ever entering the fit. The classical isotropic-moment control (a continuous band filling the centre) is falsified by the observed central dead zone. It does NOT derive μ_B or g_s from a deeper theory (that needs the Dirac equation / QED); it assumes the classical deflection z = μ_z·G·L·(L/2+D)/(M v²) and the quantized moment μ_z = g_s·m_s·μ_B, and shows the emergent, measurable observables — two spots and a moment of one Bohr magneton — follow. The recovered value's +0.6% offset from μ_B is decomposed into two verified systematics: the electron g-factor anomaly (g_s/2 = 1.00116) and the finite velocity-selector passband (1+3σ² = 1.0048). The eighth pillar of the early-quantum arc after ?world=millikan (charge is quantized): here angular momentum — and direction itself — is quantized. Distinct from ?world=franckhertz (energy levels via inelastic collisions); this is the quantization of angular momentum in space.
CERTIFIED HONEST (derisk gates H–M execute the shipped SternGerlachModule.ts, sha-pinned, TS mechanically stripped — 31 asserted pairs). The module's RNG is a module-internal seeded mulberry32 (seed 0x51e6, zero Math.random), and the μ_B measurement is a pure 32,000-draw PREFIX of that stream (4000 atoms × 8 draws) consumed entirely at init() — the animated beam continues the same stream (750 draws for 150 atoms, then one draw per beam recycle in fixedUpdate), so the shown number can never drift (proven: measurement immutable over 600 engine calls at FIXED_DT = fl(1/120)). Init measurement (all 2×4000 deflections, v₀, z₀, μ_rec, g_rec, both gap fractions) is bit-for-bit identical to an independently-coded replica; 600-call lockstep holds all 150 atom positions, the RNG stream position and both spin-partition render buffers bit-exact at every call, with the beam-recycle branch exercised 155×. HUD and chart are written ONCE at init and proven bit-FROZEN (sha-pinned). DISPLAY PRICED WITH ZERO INSTRUMENT GAP, the cleanest case yet: the module's seed 0x51e6 = 20966 IS the oracle's seed0, and its forward model + estimator share the oracle's generator verbatim — so the shown μ_rec = 9.3296×10⁻²⁴ (+0.60% vs CODATA, self-disclosed on the HUD) is BIT-IDENTICAL to the oracle's own seed-#0 recovery: the display is literally draw 1-of-24 of the oracle's scoring ensemble, sitting at z=+0.06 in 9.3290±0.0101×10⁻²⁴, and dividing the shown value by the known passband factor (1+3σ²) lands on (g_s/2)·μ_B to 0.003% — the display's +0.60% offset is the same two named systematics the ensemble gates already decompose (g-factor anomaly ×1.00116, velocity passband ×1.0048). ANSWER-FREE: MU_B appears 10× and G_S 5× in the module (declaration, destructures, the forward model feeding atoms μ_z = g_s·m_s·μ_B — the disclosed simulated physics, same as the oracle — z₀ scenery, the g = 2μ/μ_B unit conversion, HUD display); the recovery line uses only ⟨|z|⟩·M·v₀²/(G·L·(L/2+D)). LATENT DERISK WEAKNESS FIXED (rutherford #120 pattern): the original script scored against REF.constants.muB_J_per_T and never read REF.known_value, so the mandatory known-tamper self-test would have passed vacuously; scoring now uses known_value (gates A/B/E), and hand-tampering it exits 1 with the recovery unchanged. Tampers surgical: known→A/B/E only (recovery unchanged at 9.32904e-24); sha→only H; post-strip 1-ulp M_AG→only the doubles-pinned H/I/K while every string surface absorbs (9th confirmation of micro-lesson #112). NEW micro-lesson #121: pick the ulp-tamper constant so it enters a product/quotient directly — a 1-ulp T_OVEN tamper is ABSORBED by √(2kT/M) (the half-ulp rounds away and the whole measurement pipeline stays bit-identical), leaving it catchable only by the statics pin and the HUD's raw ${T_OVEN} print, i.e. not a doubles-path probe at all.
npm run derisk -- sterngerlach (scripts/sterngerlach-derisk.mjs)scripts/oracles/sterngerlach.reference.jsonO. Stern & W. Gerlach, 'Der experimentelle Nachweis der Richtungsquantelung im Magnetfeld', Z. Phys. 9, 349–352 (1922). CODATA-2018 Bohr magneton μ_B = 9.2740100783e-24 J/T; electron spin g-factor g_s = 2.00231930436. Silver atom mass M = 1.7913e-25 kg (107.87 u). Modern velocity-selected geometry: G = 1800 T/m, L = 35 mm, D = 100 mm, oven T = 1273 K.