Double pendulum
Is the double pendulum chaotic — does a hair's-breadth difference in where you release it change everything?

▶ Run the simulationSee the measured result
Units: dimensionless (ω_fast/ω_slow = 1+√2; secondary knowns ω_slow = √((2−√2)g/L) = 2.3971994, ω_fast = √((2+√2)g/L) = 5.7873513 rad/s)
How the lab tests it
Swing a bright pendulum next to a faint ghost released δ=0.004 rad away (watch them split), and quantify it with a Benettin twin started δ₀=1e-8 away — renormalise the phase-space separation and average its log-growth into the largest Lyapunov exponent λ.
What it looks for
λ > 0 (exponential divergence ⇒ deterministic chaos / sensitive dependence) at large amplitude, vs λ ≈ 0 (two coupled normal modes) for a gentle release
Double pendulum calculator (normal modes, the 1+√2 frequency ratio, mass inversion)
Two rods, one hinge, and the system every physics department keeps on a shelf because nobody can predict it. Released hard it is the textbook chaotic machine; released gently it is a pair of clean spectral lines whose ratio is a number — 1+√2 — that knows nothing about gravity, nothing about the rod length and nothing about how hard you pushed. Nothing on this page is stored. The two normal modes are ASSEMBLED from g, L and the mass ratio μ = m₂/m₁: β = μ/(1+μ), the slow mode is √((g/L)/(1+k√β)) and the fast mode √((g/L)(1+k√β)(1+μ)/N). At the lab's own bench — equal rods at 1 m, equal bobs, g = 9.81 — that is 2.3971993978640862 and 5.7873512980360946 rad/s, and their ratio comes back as the correctly-rounded 1+√2 by four independent routes at once. THE FAST MODE IS WHERE THE SPELLING MATTERS, and it is the point of this page. Every treatment prints it (g/L)/(1−√β), which is the same algebra and the one form not to ship: √β's own last-bit error is a fixed absolute 10⁻¹⁶ while the difference 1−√β is heading for zero, so the relative damage is unbounded. Scored against a 400-bit fixed-point truth the textbook form is 10⁻¹⁴ wrong at μ = 1000, 9.9% wrong at μ = 10¹⁵ and returns INFINITY at μ = 10¹⁶ — for a frequency that is perfectly finite — while the form above stays exact to the last bit or two everywhere. The subtraction is not even the guilty step: 1−√β is EXACT by Sterbenz, and the digits were already gone before it ran. Three more things here are consequences the finding never computes. A measured splitting is a WEIGHING: √β = (R−1)(R+1)/(R²+1) turns one dimensionless ratio into the mass ratio with no length, no gravity and no absolute frequency in the path, and it amplifies by exactly 2√2 at equal masses — which is why this lab's measured 2.41421324 weighs the bobs at 0.99999962231645434, and why that miss is its 1.3×10⁻⁷ spectral error seen through a derivative rather than a second error. The falsified rival — 'a double pendulum is just two pendulums' — is carried as a dial rather than a sentence, and at k = 0 both modes collapse onto √(g/L) = 3.1320919526731652 rad/s, the exact line this world's oracle measured for it; its relative miss is √2 in the algebra, and this page says out loud that the doubles part company in the last bit. And RK4's phase lag −ω⁵h⁴/120 puts the two modes' biases in the ratio R⁵, so the integrator's error inherits the spectrum's irrational. This page reaches for Math.sqrt, Math.abs and the Math.PI constant and calls no implementation-approximated function at all, so every figure is the same double in every browser and is printed to all seventeen. Two things it will NOT do. It is the SMALL-OSCILLATION spectrum: at a finite release the true frequencies sit below these lines, which is the ε² softening the lab extrapolates away rather than ignores. And it will not give you the Lyapunov exponent. λ has no closed form, it belongs to the large-amplitude flow and it is specific to the initial condition — the lab reports 1.445 and 0.007 for its two releases without calling either a constant of nature, and a page that offered you a formula for it would be lying to you.
β = m₂/(m₁+m₂) · ω_slow = √((g/L)/(1+k√β)) · ω_fast = √((g/L)(1+k√β)(1+μ)/N), N = 1+μ(1−k)(1+k) · R = ω_fast/ω_slow = (1+k√β)√((1+μ)/N) = 1+√2 at μ = 1 · √β = (R−1)(R+1)/(R²+1) · bias = −ω⁵h⁴/120