[HN Gopher] Strtod Is Wild
___________________________________________________________________
Strtod Is Wild
Author : turtledragonfly
Score : 61 points
Date : 2024-09-10 15:16 UTC (5 days ago)
(HTM) web link (festina-lente-productions.com)
(TXT) w3m dump (festina-lente-productions.com)
| fph wrote:
| I hate the anti-responsive design of this page: I zoom in (ctrl-
| plus in Firefox), and the text gets smaller.
| lifthrasiir wrote:
| I wondered why too, and it seems that it has way too many media
| queries to distinguish screen width in 5cm increments (which
| equals to ~189px in CSS). Don't think that many queries are
| needed nowadays.
| turtledragonfly wrote:
| Author here -- I apologize for that; it's on my short list of
| things to fix.
|
| I actually hadn't fully understood that the "Ctrl+" zoom in
| desktop browsers shrinks the viewport rather than doing an
| actual zoom (unlike pinch-to-zoom on a touch device) until I
| had put the media queries in place -- whoops.
|
| ----
|
| As an aside, you or another might be interested: you can
| configure Firefox to do a "pinch-zoom" style zoom when you do
| "Ctrl+scrollwheel" on the mouse:
|
| Short version: set "mousewheel.with_control.action = 5" in
| about:config.
|
| Longer discussion: https://www.tenforums.com/browsers-
| email/204202-firefox-enab...
|
| That way, you can always zoom with confidence that a site won't
| rejigger its layout as a result.
|
| (but obviously I'll update my rules to make the default
| behavior better, too)
| turtledragonfly wrote:
| This is fixed now, for the record (:
| NackerHughes wrote:
| Thank you!
| Neywiny wrote:
| I think recently I had to make my own because strtod was too
| large for my embedded system. I just wanted simple xx.yy type
| strings, so it was as easy as parsing 2 integers, convert,
| divide, add, done. I often wish these functions had more variants
| for stuff like that.
| nly wrote:
| Parsing decimal strings to double in that way will produce the
| wrong bit value in many cases.
| Neywiny wrote:
| I just needed simple values. It worked fine for me. I
| should've fuzzed it to check, but really I think all I needed
| was 1-2 decimal places.
| yjftsjthsd-h wrote:
| If it's only 2 decimals, surely you could trivially test
| every single possible input? I think of fuzzing as random,
| but that's a specific optimization that you might not need.
| lifthrasiir wrote:
| To be clear, David Gay's dtoa is not a modern implementation of
| decimal-to-float conversion. There had been several much simpler
| and performant alternatives, including:
|
| - Google's double-conversion [1], which is best known for
| introducing the Grisu family of new float-to-decimal algorithms
| but also has a much less documented float-to-decimal algorithm
| via successive approximations AFAIK.
|
| - The Eisel-Lemire algorithm [2], which is a Grisu3-like
| algorithm and returns either correct digits or a much rare
| fallback signal and currently in the standard libraries of Go and
| Rust.
|
| - I believe Microsoft's own C Runtime (msvcrt, later ucrt) also
| has a completely separate code which algorithm is roughly similar
| to one of above.
|
| These implementations also clearly demonstrate that such
| conversion only needs a bigint support of the bounded size (~3
| KB) and can be done in much smaller code than dtoa.
|
| [1] https://github.com/google/double-conversion
|
| [1] https://lemire.me/blog/2020/03/10/fast-float-parsing-in-
| prac...
| turtledragonfly wrote:
| Author here; thanks for this info! I'll add some references to
| this stuff in the article.
| jezek2 wrote:
| Some time ago I've used a simple algorithm by using 128bit
| floats for doubles (and 64bit for floats) which seems to work
| very nicely and is straightforward to implement. It passed the
| full tests for conversion for 32bit floats and the sparse tests
| for doubles.
|
| I did a blog post about it:
| https://www.fixscript.org/blog/math-library (includes
| interactive demos)
|
| Any opinions?
| jancsika wrote:
| Would be cool to see a histogram of all of the web's textual
| representation of floats based on character length.
|
| In other words-- what percentage of outstanding publicly-
| accessible data sets require an implementation of strod which can
| allocate memory on the heap?
|
| Even this article, which talks about millions of digits, could be
| parsed just fine with a strod that's limited to 64 characters.
___________________________________________________________________
(page generated 2024-09-15 23:01 UTC)