Computing the Flare Before the FPU Existed
The phonograph horn’s exponential flare — cross-sectional area growing as A(x) = A₀e^(mx) — seems like something you’d compute with a single function call. But the engineers who first modelled these curves on computers in the 1960s and 70s didn’t have that luxury. Most machines lacked floating-point hardware. The exp() function wasn’t a primitive; it was a subroutine you wrote yourself.
The Taylor series expansion of e^x is beautifully convergent:
e^x = 1 + x + x²/2! + x³/3! + x⁴/4! + ...
Each term is the previous term multiplied by x/n. You don’t need to compute factorials separately — they accumulate. This iterative structure made it ideal for early implementations.
Here’s the calculation in R, summing terms until they stop contributing meaningfully:
taylor_exp <- function(x, tol = 1e-10) {
sum <- 1
term <- 1
n <- 1
while (abs(term) > tol) {
term <- term * x / n
sum <- sum + term
n <- n + 1
}
sum
}
# Horn cross-section at 20cm with flare constant m=0.05
cat(sprintf("Area ratio: %.6f\n", taylor_exp(0.05 * 20)))
Output:
Area ratio: 2.718282
The same algorithm in Turbo Pascal, circa 1983 — the era when microcomputers started doing serious numerical work:
program HornFlare;
var
sum, term, x: real;
n: integer;
begin
x := 0.05 * 20.0; { flare rate * length }
sum := 1.0;
term := 1.0;
n := 1;
while abs(term) > 1e-10 do begin
term := term * x / n;
sum := sum + term;
n := n + 1
end;
writeln('Area ratio: ', sum:10:6)
end.
The convergence is rapid for small x — about 15 terms for six-digit precision at x = 1. For larger arguments, range reduction techniques (exploiting e^x = (e^(x/2))²) kept the series well-behaved.
What strikes me: the horn’s curve is continuous, organic, something a carver feels under the gouge. Yet it’s exactly describable by this discrete infinite sum, each term a correction to the last. The wood doesn’t know about Taylor; it just curves. But the curve exists because someone, somewhere, summed these fractions until the answer stopped changing.