Very few signatures move. A great many numbers do, and the CHANGELOG opens with
a table of every result that changed and how it was measured. Read that before
upgrading.
The largest ones:
poissonCDF returned P(X ≤ k−1) at every integer argument
normalCDF lower tail quantised, flushed to zero below x ≈ −8.3;
relative error at x = −10: 1.0 → 8.9e-15
Black-Scholes 311 negative deep-OTM prices became none — no options
code changed; the terms were noise because Φ was noise
VectorN + - dot VectorN.zero is the empty vector and any dimension
mismatch returned zeros, so zero + v was [0,0], not v.
Seeding an accumulator with .zero silently discarded
whichever element arrived first
correctedStdErr the finite-population branch had never executed in any
released version, and its guard was inverted
SimplexResult every shadow price carried the wrong sign
HazardRateModel integrated every period as a year — a one-year default
probability of 1.98% against a true 11.43%
GPU Monte Carlo baseSeed ^ tid with GF(2)-linear xorshift128+ correlated
adjacent threads; cross-thread lag-1 ρ 0.25 → ~0.00
Two crashes fixed, both reachable from public API with input that is merely
long rather than malformed: FormulaEvaluator had two unbounded recursions, and
a stack overflow cannot be caught by the caller.
The release was held until this codebase cleared the new documentation
checkers. doc-comment-code went 1,515 → 0 with no docs:illustrative marker
added to any /// fence.
6,610 tests / 582 suites pass
swift build 0 warnings
quality-gate --check all 43 of 43, 0 errors, 0 warnings
73 DocC articles all compile and run, twice, reproducibly