Skip to content

Tolerate representation noise in the presolve infinity sentinel - #95

Open
bodono wants to merge 1 commit into
mainfrom
fix-presolve-sentinel-tolerance
Open

Tolerate representation noise in the presolve infinity sentinel#95
bodono wants to merge 1 commit into
mainfrom
fix-presolve-sentinel-tolerance

Conversation

@bodono

@bodono bodono commented Aug 16, 2026

Copy link
Copy Markdown
Collaborator

QTQP's own _presolve had the same off-by-ULP blind spot just fixed in the benchmark harness: b >= 1e20 with strict comparison misses sentinels stored with ULP or float32 representation error (e.g. 9.999999999999998e19, exactly what several Maros–Mészáros files contain), materializing 1e20-magnitude rows that silently poison equilibration and residual scaling — the root cause of the historical 'chronic' benchmark failures. Drop anything within relative 1e-6 of the sentinel (covers float32 error ~1.2e-7 with margin). Test covers ULP-corrupted, float32-stored, and exact sentinels.

_presolve dropped inequality rows with b >= 1e20 using a strict
comparison, so sentinels stored with ULP- or float32-level error (e.g.
9.999999999999998e19 -- as found in several Maros-Meszaros benchmark
files) were classified as genuine finite bounds and materialized as
1e20-magnitude rows that silently poison equilibration and residual
scales. Drop anything within relative 1e-6 of the sentinel instead
(covers float32 storage error ~1.2e-7 with margin; no genuine bound
plausibly lives within one part in a million of 1e20).
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.

1 participant