File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ Benchmark results 15.02.2026c
2+
3+ Julia 12.4
4+
5+ - bench3.jl
6+ 609 612 613
7+
8+ - bench4.jl
9+ 1096 1097 1100
10+
11+ Julia 11.8
12+
13+ - bench3.jl
14+ 615 614 612
15+
16+ - bench4.jl
17+ 934 935 931
18+
19+ Root cause: NLSolversBase 7.10.0 switched from direct FiniteDiff to DifferentiationInterface for Jacobian computation.
20+ The DI backend produces subnormal values (~5.6e-305) in near-zero Jacobian columns instead of exact zeros.
21+ NLsolve's autoscale computes column norms d[j], and when d[j] is subnormal (not zero), its guard if d[j] == 0; d[j] = 1;
22+ end doesn't trigger. The subsequent g ./ d.^2 underflows d[j]^2 to 0.0, producing NaN that propagates through the solver.
23+
24+ Fix: Both KPS4.jl:688-710 and KPS3.jl:513-535 now provide an explicit Jacobian function (jac!) to nlsolve using manual
25+ central finite differences (matching FiniteDiff's defaults: step = cbrt(eps)). After computing the Jacobian, entries
26+ below sqrt(floatmin) (~1.5e-154) are flushed to zero—this prevents any value whose square would underflow from reaching
27+ NLsolve's autoscale.
You can’t perform that action at this time.
0 commit comments