◄ WORLD V · SONNY 5DART 416 · a helldive at the net

NEWTON DIVISION divide by multiplying — find 1/d with adds and mults, then scale

Division is the slow arithmetic; multiplication is fast. So compute the reciprocal and multiply. Newton’s method on f(y)=1/y − d gives the iteration y ← y·(2 − d·y) — each step doubles the correct digits, using only multiply and subtract, converging quadratically to 1/d. Then a/d = a·(1/d). This is how many CPUs and GPUs actually divide: a seed from a table, then two or three Newton steps — no long-division circuit at all.

THE TECHNIQUE y ← y·(2 − d·y) — reciprocal by multiply, then a·y

The demo finds 1/8 by Newton from a rough seed 0.1 (multiply/subtract only), then computes 40/8 = 5 without a division: live demo


HISTORY & CREDIT Newton–Raphson reciprocal · Goldschmidt variant

“To divide you need a divider.” — you need a reciprocal, and Newton finds that with only multiply and subtract. cited

the iteration · yₙ₋₁ = yₙ(2 − d·yₙ) — Newton on 1/y−d; error squares each step.
the divide · a/d = a·(1/d) — one multiply once the reciprocal is in hand.
in silicon · table seed + 2–3 Newton steps (or the Goldschmidt variant) — how real FPUs divide.

The reciprocal grown by multiply-and-subtract, the quotient a single scaling — division without a divider. resource

RECOMMEND FOR I-13 reciprocal-by-Newton, on the compiler

On the canonical compiler, Newton from seed 0.1 reaches 1/8 = 0.125 in six steps; 40×0.125 = 5, no divide used:

$ i13 run tk_newtondiv.i13 # y <- y*(2 - d*y), d=8; then 40*recip RUN OK · 147 step(s) · peak stack 6 · call depth 7 recip = 0.125 -- 1/8 by Newton (multiply/subtract only) quotient = 5 -- 40 * 0.125, no division close = 1 -- within 1e-7 of 5
Recommend as a NULL — resource, and a nod to the machine’s own arithmetic. Newton division computes the same quotient as the divide operator (i13 prints 5) using only multiply and subtract — the whole point is to trade a slow op for fast ones, the definition of the resource axis (B40). It pairs naturally with the-isqrt (418) and fast-inverse-sqrt (407): all three replace a hard primitive with an iteration that converges to it. NULL, and a reminder that even i13’s own / could be built from these.