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)

Open
#291 3 comments 0 reactions 0 assignees View on GitHub
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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.