Skip to content

v2.6.0

@jpurnell jpurnell tagged this 15 Aug 16:54
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
Assets 2
Loading