Feature #22256
openReplace missing/dtoa.c with a uscale-based algorithm. Faster, smaller footprint, and fixes a rounding error.
Description
I'm proposing a replacement of missing/dtoa.c with a faster, leaner, more correct algorithm. I have a PR open as a proposed solution, which also provides more details to the origin of the algorithm and its performance compared to missing/dtoa.c.
This would solve a few edge case rounding issues that currently happen during Float#to_s, and it would significantly increase the performance of Float#to_s and String#to_f, all while unifying both formatting (shortest-width and fixed-width) and parsing under one primitive.
Updated by byroot (Jean Boussier) 1 day ago
[Feature #21308] was filed a while ago.
dtoa.c is really showing its age, and in the last couple years there has been a lot of new algorithms on that particular topic.
Currently ruby/json uses Grisu for double -> string and Eisel-Lemire fast float for string -> double.
If these benchmarks are to be believed: https://fmtlib.github.io/dtoa-benchmark/results/, uscale while much simpler than alternatives, may not be the best choice. If we're to migrate away from dtoa.c I think we might as well consider several alternatives rather than jump straight to uscale.
So perhaps it'd be best to put [Feature #21308] on the next developer meeting topic to see what the criterias would be for replacement.
Updated by byroot (Jean Boussier) 1 day ago
- Related to Feature #21308: Replacing the Float#to_s (dtoa.c) implementation with a modern algorithm added