fast_float
dragonbox
Our great sponsors
fast_float | dragonbox | |
---|---|---|
15 | 9 | |
1,267 | 491 | |
1.9% | - | |
8.8 | 8.2 | |
28 days ago | 5 days ago | |
C++ | C++ | |
Apache License 2.0 | Apache License 2.0 |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
fast_float
-
Parquet: More than just “Turbo CSV”
> Google put in significant engineering effort into "Ryu", a parsing library for double-precision floating point numbers: https://github.com/ulfjack/ryu
It's not a parsing library, but a printing one, i.e., double -> string. https://github.com/fastfloat/fast_float is a parsing library, i.e., string -> double, not by Google though, but was indeed motivated by parsing JSON fast https://lemire.me/blog/2020/03/10/fast-float-parsing-in-prac...
-
Can sanitizers find the two bugs I wrote in C++?
This makes sense for integers but betware floating point from_chars - libc++ still doesn't implement it and libstdc++ implements it by wrapping locale-dependent libc functions which involves temporarily changing the thread locale and possibly memory allocation to make the passed string 0-terminated. IMO libstdc++'s checkbox "solution" is worse than not implementing it at all - user's are better off using Lemire's API-compatible fast_float implementation [0].
-
Parsing can become accidentally quadratic because of sscanf
Just above this comment is a merged PR, which references fast_float library: https://github.com/fastfloat/fast_float
-
Making Rust Float Parsing Fast: libcore Edition
Daniel Lemire @lemire (creator of the algorithm, author of the C++ implementation, and provided constant feedback to help guide the PR).
-
RapidObj v0.1 - A fast, header-only, C++17 library for parsing Wavefront .obj files.
And out of 6,000 lines in the file, at least 3000 are other people's code: earcut for polygon triangulation and fast_float because .obj files typically contain a lot of floating point numbers so it's important to parse them quickly.
This library is optimised for loading and parsing big .obj files. Optimisation techniques used are: asynchronous IO, parallel parsing, and it uses fast_float to quickly parse floating point numbers.
-
First release of dragonbox, a fast float-to-string conversion algorithm, is available
How this compares to https://github.com/fastfloat/fast_float ?
- Eisel-Lemire Algorithm
-
Ask HN: C++17/C++20 example projects with good style?
Some fun things I've figured out:
* https://github.com/fastfloat/fast_float <-- for fast float/double conversion
* from_chars() for fast integer conversion (though I benchmarked a few that were faster)
* https://github.com/simdjson/simdjson <-- apparently the fastest JSON library
It's hard to program normal anymore, for every little thing I ask myself "but I want it faster!" TypeScript was so much easier, other than O(n) and friends, I never cared xD
- Fastfloat – C++ library 4x faster than strtod
dragonbox
-
23 years into my career, I still love PHP and JavaScript
Apparently exact minimal float-to-string conversion is more recent than I thought, and many languages used to print more (Python?) or less (PHP) decimal digits than necessary to uniquely identify the bit pattern. Python correctly prints 46000.80 + 553.04 as 46553.840000000004, but I don't know if it ever prints more digits than needed. One recent algorithm for printing floats exactly is https://github.com/ulfjack/ryu, though I'm unaware what's the state-of-the-art (https://github.com/jk-jeon/dragonbox claims to be a benchmark and the best algorithm).
-
C++ I wrote a simple and fast formatting library for strings
A recent update to fmt was posted to r/cpp 3 days ago (https://www.reddit.com/r/cpp/comments/vrxkt0/fmt_90_released_with_improvements_to_floating/), and since that's still fresh on people's minds, they'll wonder how yours compares; and they'll probably wonder how it compares in terms of precision, round trip-ability, and performance of DragonBox https://github.com/jk-jeon/dragonbox. By "they", I probably mean "me" :D.
-
I created something much faster than a std::string
Existing fast and correct float-to-string implementations are out there. Just use them: https://github.com/jk-jeon/dragonbox. Or maybe use your stdlib if it has good support
-
How to read ascii files faster?
Parse floats faster with dragonbox
- Dragonbox 1.1.0 is released (a fast float-to-string conversion algorithm)
-
C++20 std::format is already std::regex 2.0 situation.
Even if what you say is true, it makes little sense to not reuse it. There are other concerns here and one of them is code size. But to address the performance issue, fmtlib is doing under 50ns for most fp numbers via dragonbox(https://github.com/jk-jeon/dragonbox has the chart). So still cpu bound, but all FP output is CPU bound. At this point, what prices are we trading for faster?
-
First release of dragonbox, a fast float-to-string conversion algorithm, is available
There are some benchmarks in https://github.com/jk-jeon/dragonbox#performance. TL;DR it's faster than other state of the art algorithms like Ryu, Schubfach and variations of Grisu. We saw a nice speed up when switching from Grisu3 to Dragonbox in {fmt}: https://github.com/fmtlib/fmt/pull/1882 and it has been improved even more since then.
What are some alternatives?
C++ Format - A modern formatting library
rapidobj - A fast, header-only, C++17 library for parsing Wavefront .obj files.
fast-float-rust - Super-fast float parser in Rust (now part of Rust core)
ryu - Converts floating point numbers to decimal strings
ryu - Ryu component-based software defined networking framework
dtoa-benchmark - C++ double-to-string conversion benchmark
itoa - Fast integer to ascii / integer to string conversion
RapidJSON - A fast JSON parser/generator for C++ with both SAX/DOM style API
simdutf8 - SIMD-accelerated UTF-8 validation for Rust.
rapidyaml - Rapid YAML - a library to parse and emit YAML, and do it fast.
earcut.hpp - Fast, header-only polygon triangulation