Skip to content

lib: improve float parsing & rendering precision - #9

Open
Fang- wants to merge 2 commits into
masterfrom
m/r-fixes
Open

lib: improve float parsing & rendering precision#9
Fang- wants to merge 2 commits into
masterfrom
m/r-fixes

Conversation

@Fang-

@Fang- Fang- commented Aug 22, 2026

Copy link
Copy Markdown
Member

Both parsing and rendering of @r* floats had some precision issues. For some values, the parsed bigint would be off-by-one. For some values, the rendered literal would be off-by-one-fraction. This broke round-tripping, and was mismatching with hoon behavior.

Here, we rewrite construct() wholesale. This gains us legibility and lets us fix the root cause elegantly, rather than patching over the problem with a spot-the-mistake branch in the code.
(Arguably legibility gains don't matter since this is essentially write-once code. I haven't tested for perf, but never did that that for the old implementation either.)

We also tweak the "output size" argument we pass to dragon4() so that we render at the correct, expected precision.

We add specific regression test cases for this, and re-enable fuzzing for float auras.

Fang- added 2 commits August 22, 2026 21:51
Rewrite float construction to be more legible and properly account for
the sticky bit. Previous implementation was truncating it, giving
trouble on some values.
There is an implicit leading bit in the `precisionBits`, which we must
account for when specifying the max output digits of `dragon4`.

Since all problems with float parsing _and_ rendering are now resolved,
we re-enable tho float fuzztests.
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