Skip to content

Handle Floch-Kennedy SABR parameter limits without cancellation - #3045

Open
jackiectl2 wants to merge 1 commit into
lballabio:masterfrom
jackiectl2:fix-sabr-floch-kennedy-limits
Open

jackiectl2 wants to merge 1 commit into
lballabio:masterfrom
jackiectl2:fix-sabr-floch-kennedy-limits

Conversation

@jackiectl2

Copy link
Copy Markdown
Contributor

Closes #3018.

Use the analytic limits y = log(k/F) at beta = 1 and Dint = -y/alpha at nu = 0. Both parameter values are allowed by the SABR model, but currently produce NaN away from the near-ATM Taylor branch.

For nonzero values, evaluate the power difference with expm1 and rationalize the distance logarithm before using log1p. This also avoids the cancellation near those limits, without choosing an arbitrary parameter cutoff.

The regression covers the two exact boundaries, beta approaching 1, small nonzero nu, and constant volatility on both sides of the near-ATM switch. Reference values were independently evaluated at 70 decimal digits; existing published-example and ATM-smoothness tests are retained.

Validation:

  • The new regression reports six failures against the original implementation, including NaNs and cancellation errors.
  • CMake GCC Release build of the library and test executable succeeds (C++17, Boost 1.85, unity build).
  • The full QuantLibTests/InterpolationTests suite passes.
  • git diff --check passes.

The full QuantLib test suite, MSVC/macOS and non-default/AAD builds were not run. No remote workflows were dispatched.

Signed-off-by: Tianlang (Jackie) Chen <305351710+jackiectl2@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

sabrFlochKennedyVolatility returns NaN at beta=1 and at nu=0, both removable singularities

1 participant