JuliaMath / JuliaMath/DoubleFloats.jl
Release request: tag a version with the #286 `inv` fix (v1.8.0–v1.9.1 silently return Float64-quality reciprocals)
- Dominant language
- Julia
- Stars
- 172
- Forks
- 37
- PR merge metrics
- No merged PRs in 30d
Description
The `inv` precision bug reported in #285 and fixed by #286 (merged June 23) is still in every **registered** version: the registry's latest is v1.9.1, and `main`'s `Project.toml` already says v1.9.3 but no release has been tagged/registered. Could you register a patch release? We'd like to share how much damage the bug can do downstream, as motivation for tagging soon.
## Impact we observed (conformal-bootstrap linear programming)
Julia's generic LU factorization calls `inv(A[k,k])` on every pivot. For matrices whose entries were lifted from `Float64` data (so `lo == 0` — the exact case the v1.8.0 guard mishandles), the entire Double64 factorization silently degrades to roughly Float64 quality:
```julia
using DoubleFloats, LinearAlgebra, Random
Random.seed!(42)
A = Double64.(randn(288, 288)) # lifted Float64 matrix: every entry has lo == 0
F = lu(A)
Float64(norm(F.L*F.U - A[F.p,:]) / norm(A))
# v1.7.1 / main: 1.8e-31 (true Double64 quality)
# v1.8.0–v1.9.1: 7.9e-19 (~12 digits lost)
```
In our application (a dual-simplex solver working near the limits of Double64 conditioning) this silent precision loss corrupted the basis inverse until the solver lost primal feasibility and produced garbage results **with no error thrown**. It took a full bisection across your releases to trace the change in behavior to `inv`, since nothing in the API or types changes — only the accuracy.
## Verification that `main` resolves it
- `Float64(inv(Double64(3.0)) * 3 - 1)` → `-5.55e-17` on v1.9.1, `0.0` on `main` (v1.9.3-dev).
- The LU residual above returns to `1.8e-31` on `main`.
- Our solver's high-precision iteration trace under `main` matches the v1.7.1 trace digit-for-digit — the fix fully restores pre-1.8.0 accuracy for this workload.
(julia 1.12.6, linux x86_64.)
Thanks for the quick fix in #286 — a tagged release would let downstream projects drop their `=1.7.1` compat pins.
Contributor guide
No contributing guide indexed for this repository
Research direction
Start with Project.toml on main to confirm the v1.9.3 version and review the merged #286 fix. Check the package registry entry and Julia release process, then verify that the tagged and registered patch release includes the fix and lets downstream users remove their v1.7.1 pin.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- julia
- Domain
- release
- Issue type
- Feature
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100