Carr-Madan FFT Pricing
Instead of running a separate pricing integral for every single strike, the Carr-Madan method reshapes the problem into a Fourier transform, so an entire strike range is priced in one batch.
Prerequisites: Characteristic Function Pricing, The Fourier Transform, Risk-Neutral Pricing
Once a model's characteristic function is known, one option can be priced by numerically integrating over it — but a real desk needs a whole surface, dozens of strikes and expiries at once, and running that integral separately for every single strike is slow. Carr and Madan noticed something better: the option price, as a function of log-strike, is itself (after one adjustment) a Fourier transform of a simple function of the characteristic function. That means the fast Fourier transform (FFT) — an algorithm built to compute exactly this kind of transform, at every output point simultaneously — can produce prices for hundreds of strikes in one pass.
One assembly line instead of one cook per dish
Cooking a hundred dishes one at a time, from scratch, each with its own trip to the pantry, is slow. An assembly line that preps the shared ingredients once and stamps out each dish in parallel is what a commercial kitchen actually does. Pricing every strike with its own separate integral is the one-cook-at-a-time approach; the FFT is the assembly line, computing an entire vector of option prices — one per strike — in a single batched operation, because the FFT algorithm computes many related sums simultaneously far faster than doing each one alone.
In plain English: is the model's characteristic function, is a damping factor Carr and Madan introduce purely to make the transform well-behaved (raw option prices don't decay fast enough at extreme strikes for the Fourier integral to converge cleanly), and packages the characteristic function into the exact shape a Fourier transform expects. Feed into an FFT, and out comes a whole vector of undiscounted, damped call prices across a grid of log-strikes at once.
Worked example 1: seeing the damping do its job. Without damping, the call price as a function of strike doesn't decay to zero fast enough as the strike goes to zero (deep in the money, the call price approaches , not zero), so its Fourier transform doesn't converge. Multiplying by (where is log-strike) before transforming forces decay at both ends. A commonly used value is : at a strike far below spot, say, the raw call price is roughly — clearly not shrinking to zero — but with gives times smaller weight applied at that point than at the money, which is enough damping in practice for the transform to converge.
An entire surface like this one is exactly what one FFT-priced strike grid, repeated across expiries, produces — every strike on every tenor slice came from batched Fourier inversions, not thousands of separate numerical integrals.
Worked example 2: the batching, on a toy scale. A real FFT handles or more grid points at once; to see the mechanics on paper, imagine a toy transform with just points, weights (illustrative numbers standing in for damped, discretised characteristic-function values). The discrete Fourier transform at output index is . For : (every strike's contribution simply adds, since ). For : . Two output prices computed from the same four input weights, in one coordinated pass — that's the batching an FFT gives you on however many strikes you configure the grid for, computed together rather than one integral at a time.
What this means in practice
Any model priced through Characteristic Function Pricing — Heston, Variance Gamma, Merton jump-diffusion — uses Carr-Madan or a close variant whenever a full calibration or a full volatility surface is needed, since calibrating a model means repricing dozens of strikes and expiries at every optimiser iteration, and doing that with the FFT rather than strike-by-strike integration is often the difference between a calibration that runs in seconds and one that runs in minutes.
The damping factor is not a free tuning knob to ignore — choosing it too small leaves the Fourier integral poorly behaved (numerical noise near the money), and choosing it too large can push in the denominator toward instability for some characteristic functions. Production implementations typically test a couple of values and check the output prices agree before trusting a calibration built on top of them.
Carr-Madan turns option pricing into a Fourier transform of the (damped) characteristic function, so a single FFT call prices an entire grid of strikes at once instead of requiring one numerical integral per strike.
Related concepts
Practice in interviews
Further reading
- Carr & Madan (1999), Option Valuation Using the Fast Fourier Transform