A compass and straightedge can only ever produce lengths you reach by adding, subtracting, multiplying, dividing, and taking square roots — starting from 1. Every such number lives in a tower of "degree-2" steps. The target, ∛2, needs a cube root, and no stack of square roots can ever land on it.
<p class="hint">A compass and straightedge can only build lengths reached from <b>1</b> by +, −, ×, ÷ and <b>square roots</b>. Chase the target <b>∛2 ≈ 1.2599…</b> — you can get agonizingly close, but you can never land on it exactly.</p>
<div class="readout">
<div class="big">value = <span id="val">1.000000000000</span></div>
<div class="gap">gap to ∛2 = <span id="gap">0.259921049895</span></div>
</div>
<div class="bar"><div class="tick target" title="∛2"></div><div class="dot" id="dot"></div></div>
<div class="btns">
<button data-op="sqrt" type="button">√x</button>
<button data-op="mul2" type="button">× 2</button>
<button data-op="div2" type="button">÷ 2</button>
<button data-op="add" type="button">+ 0.1</button>
<button data-op="sub" type="button">− 0.1</button>
<button data-op="cbrt" type="button" class="forbidden">∛x (forbidden)</button>
<button id="reset" type="button" class="ghost">Reset to 1</button>
</div>
<div class="status" id="status">Square roots are allowed. A cube root is not — that is the whole point.</div>
* { box-sizing: border-box; }
body { font-family: system-ui, sans-serif; color: #222; margin: 0; }
.hint { font-size: .9rem; color: #444; margin: 0 0 .7rem; line-height: 1.45; }
.readout { margin: .3rem 0 .6rem; }
.big { font: 700 20px ui-monospace, monospace; color: #1d3557; }
.gap { font: 600 14px ui-monospace, monospace; color: #555; margin-top: .2rem; }
.bar { position: relative; height: 14px; background: #e8eef3; border: 1px solid #cdd9e3;
border-radius: 7px; margin: .6rem 0 .9rem; }
.tick { position: absolute; top: -4px; width: 2px; height: 22px; background: #0a7d33; }
.tick.target { left: 79.37%; }
.dot { position: absolute; top: 1px; width: 10px; height: 10px; border-radius: 50%;
background: #e63946; transform: translateX(-50%); transition: left .15s; left: 50%; }
.btns { display: flex; gap: .5rem; flex-wrap: wrap; }
button { font: 600 14px system-ui, sans-serif; padding: .45rem .8rem; border: 1px solid #1d3557;
background: #1d3557; color: #fff; border-radius: 8px; cursor: pointer; }
button.ghost { background: #fff; color: #1d3557; }
button.forbidden { background: #fff; color: #c92f3c; border-color: #c92f3c; }
.status { font-size: .95rem; font-weight: 600; margin: .6rem 0 0; min-height: 1.4em; color: #444; }
.status.ok { color: #0a7d33; }
.status.bad { color: #c92f3c; }
// Constructible numbers: starting from 1, the only lengths a compass and
// straightedge can build are those reachable by +, -, *, / and square roots.
// Every such number has degree a power of 2 over the rationals. The target
// cbrt(2) is a root of x^3 - 2, which is irreducible, so it has degree 3 — NOT a power of 2 — and is therefore NOT constructible (Wantzel, 1837).
const TARGET = Math.cbrt(2); // 1.2599210498948732...
let value = 1;
function fmt(x){ return x.toFixed(12); }
function render(){
document.getElementById('val').textContent = fmt(value);
const gap = Math.abs(value - TARGET);
document.getElementById('gap').textContent = fmt(gap);
// map values in [0, ~1.587] across the bar; target sits at 79.37%
const pct = Math.max(0, Math.min(100, (value / (TARGET / 0.7937)) * 100));
document.getElementById('dot').style.left = pct + '%';
}
function setStatus(t, cls){ const s=document.getElementById('status'); s.textContent=t; s.className='status '+(cls||''); }
function checkExact(){
// No allowed operation can ever produce cbrt(2) exactly from 1.
const gap = Math.abs(value - TARGET);
if (gap < 1e-9) setStatus('Floating point rounded you onto the target — but with exact arithmetic this is impossible. ∛2 has degree 3.', 'bad');
else if (gap < 0.01) setStatus('So close! Yet ∛2 has degree 3 over the rationals, so no square-root tower can ever reach it exactly.', 'bad');
else setStatus('Square roots are allowed. A cube root is not — that is the whole point.', '');
}
const ops = {
sqrt: () => { value = Math.sqrt(value); }, // allowed: degree 2 step
mul2: () => { value = value * 2; }, // allowed: rational
div2: () => { value = value / 2; }, // allowed: rational
add: () => { value = value + 0.1; }, // allowed: rational
sub: () => { value = Math.max(0, value - 0.1); }, // allowed: rational
};
document.querySelectorAll('button[data-op]').forEach(b => {
b.addEventListener('click', () => {
const op = b.getAttribute('data-op');
if (op === 'cbrt') {
setStatus('A cube root is exactly the move a compass and straightedge cannot make. Forbidden.', 'bad');
return;
}
ops[op]();
render();
checkExact();
});
});
document.getElementById('reset').addEventListener('click', () => {
value = 1; render(); setStatus('Back to 1. Build with +, -, ×, ÷ and √ only.', '');
});
render();
console.log('cbrt(2) =', TARGET, '| x^3 - 2 has degree 3, not a power of 2 -> not constructible');
<p class="hint">A compass and straightedge can only build lengths reached from <b>1</b> by +, −, ×, ÷ and <b>square roots</b>. Chase the target <b>∛2 ≈ 1.2599…</b> — you can get agonizingly close, but you can never land on it exactly.</p>
<div class="readout">
<div class="big">value = <span id="val">1.000000000000</span></div>
<div class="gap">gap to ∛2 = <span id="gap">0.259921049895</span></div>
</div>
<div class="bar"><div class="tick target" title="∛2"></div><div class="dot" id="dot"></div></div>
<div class="btns">
<button data-op="sqrt" type="button">√x</button>
<button data-op="mul2" type="button">× 2</button>
<button data-op="div2" type="button">÷ 2</button>
<button data-op="add" type="button">+ 0.1</button>
<button data-op="sub" type="button">− 0.1</button>
<button data-op="cbrt" type="button" class="forbidden">∛x (forbidden)</button>
<button id="reset" type="button" class="ghost">Reset to 1</button>
</div>
<div class="status" id="status">Square roots are allowed. A cube root is not — that is the whole point.</div>
* { box-sizing: border-box; }
body { font-family: system-ui, sans-serif; color: #222; margin: 0; }
.hint { font-size: .9rem; color: #444; margin: 0 0 .7rem; line-height: 1.45; }
.readout { margin: .3rem 0 .6rem; }
.big { font: 700 20px ui-monospace, monospace; color: #1d3557; }
.gap { font: 600 14px ui-monospace, monospace; color: #555; margin-top: .2rem; }
.bar { position: relative; height: 14px; background: #e8eef3; border: 1px solid #cdd9e3;
border-radius: 7px; margin: .6rem 0 .9rem; }
.tick { position: absolute; top: -4px; width: 2px; height: 22px; background: #0a7d33; }
.tick.target { left: 79.37%; }
.dot { position: absolute; top: 1px; width: 10px; height: 10px; border-radius: 50%;
background: #e63946; transform: translateX(-50%); transition: left .15s; left: 50%; }
.btns { display: flex; gap: .5rem; flex-wrap: wrap; }
button { font: 600 14px system-ui, sans-serif; padding: .45rem .8rem; border: 1px solid #1d3557;
background: #1d3557; color: #fff; border-radius: 8px; cursor: pointer; }
button.ghost { background: #fff; color: #1d3557; }
button.forbidden { background: #fff; color: #c92f3c; border-color: #c92f3c; }
.status { font-size: .95rem; font-weight: 600; margin: .6rem 0 0; min-height: 1.4em; color: #444; }
.status.ok { color: #0a7d33; }
.status.bad { color: #c92f3c; }
// Constructible numbers: starting from 1, the only lengths a compass and
// straightedge can build are those reachable by +, -, *, / and square roots.
// Every such number has degree a power of 2 over the rationals. The target
// cbrt(2) is a root of x^3 - 2, which is irreducible, so it has degree 3 — NOT a power of 2 — and is therefore NOT constructible (Wantzel, 1837).
const TARGET = Math.cbrt(2); // 1.2599210498948732...
let value = 1;
function fmt(x){ return x.toFixed(12); }
function render(){
document.getElementById('val').textContent = fmt(value);
const gap = Math.abs(value - TARGET);
document.getElementById('gap').textContent = fmt(gap);
// map values in [0, ~1.587] across the bar; target sits at 79.37%
const pct = Math.max(0, Math.min(100, (value / (TARGET / 0.7937)) * 100));
document.getElementById('dot').style.left = pct + '%';
}
function setStatus(t, cls){ const s=document.getElementById('status'); s.textContent=t; s.className='status '+(cls||''); }
function checkExact(){
// No allowed operation can ever produce cbrt(2) exactly from 1.
const gap = Math.abs(value - TARGET);
if (gap < 1e-9) setStatus('Floating point rounded you onto the target — but with exact arithmetic this is impossible. ∛2 has degree 3.', 'bad');
else if (gap < 0.01) setStatus('So close! Yet ∛2 has degree 3 over the rationals, so no square-root tower can ever reach it exactly.', 'bad');
else setStatus('Square roots are allowed. A cube root is not — that is the whole point.', '');
}
const ops = {
sqrt: () => { value = Math.sqrt(value); }, // allowed: degree 2 step
mul2: () => { value = value * 2; }, // allowed: rational
div2: () => { value = value / 2; }, // allowed: rational
add: () => { value = value + 0.1; }, // allowed: rational
sub: () => { value = Math.max(0, value - 0.1); }, // allowed: rational
};
document.querySelectorAll('button[data-op]').forEach(b => {
b.addEventListener('click', () => {
const op = b.getAttribute('data-op');
if (op === 'cbrt') {
setStatus('A cube root is exactly the move a compass and straightedge cannot make. Forbidden.', 'bad');
return;
}
ops[op]();
render();
checkExact();
});
});
document.getElementById('reset').addEventListener('click', () => {
value = 1; render(); setStatus('Back to 1. Build with +, -, ×, ÷ and √ only.', '');
});
render();
console.log('cbrt(2) =', TARGET, '| x^3 - 2 has degree 3, not a power of 2 -> not constructible');
Start from 1 and apply the buttons. You can chase √2, then √(√2), then nudge with arithmetic — and the value will drift agonizingly close to ∛2 ≈ 1.2599 without ever hitting it exactly. Checking whether a length is constructible is the easy part; the deep result is that ∛2 is forever out of reach. The same wall stops trisecting an angle and squaring the circle.
Comments
Loading comments...