Bump-and-revalue remains a valuable validation oracle even when adjoint AD is the production sensitivity engine.
Core mechanism
A central finite difference reprices the trade above and below a factor value and estimates the slope. The adjoint obtains the derivative of the recorded computation directly; common random numbers reduce the simulation noise in their comparison.
Practical workflow
Choose a bump consistent with factor units, hold random draws and all unrelated inputs fixed, and compare absolute as well as relative differences. Investigate material disagreements by first checking payoff discontinuities and unit scaling.
Key details
Bump-and-revalue gets a Greek by repricing under a shifted input: (V(x+h) - V(x-h)) / 2h. For N risk factors that is 1 + 2N price-only Monte-Carlo runs (one-sided: 1 + N). Adjoint AD gets all N from one reverse sweep that costs a small constant on top of the price.
The ratio is ~ (1 + 2N) / (1 + adjoint overhead). It grows linearly with the number of risk factors: at N = 20 the bump grid is 41 revaluations against the same single adjoint sweep. The two agree on every number —
price + delta + vega + rho + dV/dK + dV/dT from one adjoint sweep vs the 1 + 2×5 central-bump grid, per payoff. 1,000,000 scenarios, 128 steps, seed 42, cpu-jit. Harness: .../bench/ProductBench.java.
The smoothed path-dependent payoffs (barrier, digital, cliquet, autocallable) get a *usable* adjoint delta this way — a raw-discontinuity bump of those is dominated by variance, not just slower.
Scope and review point
Finite differences themselves have truncation and Monte-Carlo error. Agreement is evidence, not a blanket proof, and a regulated validation standard must set its own tolerances.