MatLogicaAADC Tracer — calculation report for validation review2026-10-13 18:10:20 UTC

European option

spot 100 · strike 105 · interest rate 5% · dividend yield 2% · volatility 20% · maturity (years) 1 · option type call

NPV = 6.9869

The trace identified 17 implementation constants and 24 decision points across 12 source files; repeated uses of the same line are listed once.

Documented formula → the code that ran

Black-Scholes-Merton: C = S·e^(-qT)·N(d1) − K·e^(-rT)·N(d2)
N(d1), N(d2) — the standard normal cumulative distribution functiona rational approximation to the error functionql/math/errorfunction.cpp
d1, d2 and the closed-form priceQuantLib's Black calculator (the same formula, written on the forward price)ql/pricingengines/blackcalculator.cpp
e^(-rT), e^(-qT) — interest-rate and dividend-yield discountinginterest-rate compounding to discount factorsql/interestrate.cpp

Implementation constants reached by this calculation (17)

Includes tolerances, cut-offs, numerical limits, the day-count convention, and thresholds for the sensitivities (Greeks) that this QuantLib engine calculates automatically with every price.
valuerolesource
8.697191480061655e-29tolerance for comparing with zero, (42 × machine epsilon)²ql/math/comparison.hpp:72
1e-08normal-distribution left-tail threshold (switches to the asymptotic formula)ql/math/distributions/normaldistribution.cpp:36
-690.0exponent cut-off below which e^x is treated as zeroql/math/distributions/normaldistribution.hpp:279
0.84375error-function rational-approximation region switchql/math/errorfunction.cpp:209
3.7252902984e-09error-function small-argument cut-offql/math/errorfunction.cpp:210
2.220446049250313e-16zero-volatility threshold: selects the standard formula above machine epsilon and zero-volatility handling below itql/pricingengines/blackcalculator.cpp:77
2.220446049250313e-16zero-volatility threshold for delta (machine epsilon)ql/pricingengines/blackcalculator.cpp:208
2.220446049250313e-16zero-volatility threshold for forward delta (machine epsilon)ql/pricingengines/blackcalculator.cpp:251
2.220446049250313e-16near-zero price threshold in the elasticity calculation (machine epsilon)ql/pricingengines/blackcalculator.cpp:291
2.220446049250313e-16zero-volatility threshold for gamma (machine epsilon)ql/pricingengines/blackcalculator.cpp:320
2.220446049250313e-16zero-volatility threshold for vega (machine epsilon)ql/pricingengines/blackcalculator.cpp:377
2.220446049250313e-16zero-volatility threshold for rho (machine epsilon)ql/pricingengines/blackcalculator.cpp:396
2.220446049250313e-16zero-volatility threshold for dividend rho (machine epsilon)ql/pricingengines/blackcalculator.cpp:415
2.220446049250313e-16zero-volatility threshold for strike sensitivity (machine epsilon)ql/pricingengines/blackcalculator.cpp:433
-1.7976931348623157e+308lowest representable number (no lower strike limit)ql/termstructures/volatility/equityfx/blackconstantvol.hpp:118
1.7976931348623157e+308highest representable number (no upper strike limit)ql/termstructures/volatility/equityfx/blackconstantvol.hpp:122
365.0Actual/365 (Fixed) day-count denominatorql/time/daycounters/actual365fixed.hpp:57

Input-dependent decision points reached (24)

Repricing with shifted inputs can make the code take the other path at these points.
kindsource
input-dependent branch (if)ql/quotes/simplequote.hpp:69
input-dependent branch (if)ql/interestrate.cpp:47
input-dependent branch (if)ql/pricingengines/vanilla/analyticeuropeanengine.cpp:69
input-dependent branch (if)ql/pricingengines/blackcalculator.cpp:68
input-dependent branch (if)ql/pricingengines/blackcalculator.cpp:72
input-dependent branch (if)ql/pricingengines/blackcalculator.cpp:74
input-dependent branch (if)ql/pricingengines/blackcalculator.cpp:77
input-dependent branch (if)ql/math/errorfunction.cpp:200
input-dependent branch (if)ql/math/errorfunction.cpp:209
input-dependent branch (if)ql/math/errorfunction.cpp:210
input-dependent branch (if)ql/math/distributions/normaldistribution.cpp:36
input-dependent branch (if)ql/math/distributions/normaldistribution.hpp:279
input-dependent branch (if)ql/pricingengines/blackcalculator.cpp:204
input-dependent branch (if)ql/pricingengines/blackcalculator.cpp:208
input-dependent branch (if)ql/pricingengines/blackcalculator.cpp:251
input-dependent branch (if)ql/pricingengines/blackcalculator.cpp:291
input-dependent branch (if)ql/pricingengines/blackcalculator.cpp:316
input-dependent branch (if)ql/pricingengines/blackcalculator.cpp:320
input-dependent branch (if)ql/pricingengines/blackcalculator.cpp:396
input-dependent branch (if)ql/pricingengines/blackcalculator.cpp:415
input-dependent branch (if)ql/pricingengines/blackcalculator.cpp:377
input-dependent branch (if)ql/pricingengines/blackcalculator.cpp:433
input-dependent branch (if)ql/instrument.hpp:170
input-dependent branch (if)ql/instruments/oneassetoption.cpp:39

Suggested checks

Reprice on both sides of material decision points, then compare the results with an independent implementation or approved reference calculation.

The report contains selected details recorded while this trade was calculated. Validation judgement — tiering, materiality and sign-off — stays with your team.