A Bachelier Normal Implied Volatility Solver

Around 2014, I proposed a few Bachelier implied volatility “solvers”. The first one was inspired by Steven G. Johnson’s Faddeeva package for the complex error function: it used a piecewise Chebyshev polynomial representation to have a near machine accurate representation of the Bachelier implied volatility. Why did I put “solver” in quotes? Because the problem can be reduced to a 1D function representation (as originally shown by Choi, Kim and Kwak in 2009). Then, I was encouraged by Gary Kennedy to find a simpler rational function approximation, I used 3 or 4 rational functions to cover the full range of the Bachelier implied volatility function.

Recently, I decided to revisit a little bit the idea, using simpler transformations for some zones to make the solver even faster (and slightly more accurate). Compared to Peter Jäckel’s Implied Normal Volatility solver, it is more than twice as fast. This is because there is a correction step involving the normal density function in P.J.’s solver. Interestingly, testing out initially Quantlib’s implementation gave me the impression it wasn’t so accurate. There may be something wrong there as a direct port of P.J. algo to Rust or Java was very accurate.

Relative error in Bachelier implied volatility as a function of |d|=|K-F|/(sigma*sqrt(T)) when evaluated fully in 64-bit arithmetic.

The paper on the new LFK2026 Normal implied volatlity solver is available at https://arxiv.org/abs/2605.18343 and minimal Java code here.

Comments

comments powered by Disqus