Top all-time · #8419
vitaut.net
Personal blog · vitaut.netprogrammingsystems
vitaut.net is a personal blog at vitaut.net about programming and systems. Since 2023, 9 different Hacker News readers have linked it 25 times, most often “Schubfach: The smallest floating point double-to-string impleme”. It is still writing: the last post was on 2026-08-18, and you can follow it by feed.
Too few sampled comments (2) to say how often HN recommends it.?
Why HN links it
Posts by the {fmt} C++ formatting library developer on fast double-to-string conversion and a 65-line string formatting library. Commenters link them as technical background, and one questions a detail.
Summarised by Claude from a sample of 2 HN comments that link here. Each comment is marked recommending, critical or neutral (citing without judging); how this works.
Most-linked posts?
- Schubfach: The smallest floating point double-to-string impleme4 people · 4 mentions · first linked 2025-11-29
- Optimizing the unoptimizable: a journey to faster C++ compile times3 people · 3 mentions · first linked 2024-01-06
- Honey, I shrunk {fmt}: bringing binary size to 14k and ditching the C++ runtime3 people · 3 mentions · first linked 2024-08-30
- The fastest double-to-string algorithm you've never heard of2 people · 3 mentions · first linked 2026-08-11
- Zmij: Faster floating point double-to-string conversion2 people · 2 mentions · first linked 2025-12-13
What Hacker News says?
Glad you asked. I recently wrote a post about it: https://vitaut.net/posts/2023/print-in-cpp23/ .
Comment linking /posts/2023/print-in-cpp23/
on “Learn Modern C++”Submitted Honey, I shrunk {fmt}: bringing binary size to 14k and ditching the C++ runtime as a story · 244 points
HN discussionWith fwrite that would be another level of buffering in addition to FILE's buffer. If you are interested in what {fmt} is doing, a good starting point is https://github.com/fmtlib/fmt/blob/35dcc58263d6b55419a5932bd... . It is also possible to bypass stdio completely and get even faster output ( https://vitaut.net/posts/2020/optimal-file-buffer-size/ ) and while it is great for files, it may introduce interleaving pr…
Comment linking /posts/2020/optimal-file-buffer-size/
on “Stdio(3) change: FILE is now opaque”Submitted Zmij: Faster floating point double-to-string conversion as a story · 148 points
HN discussionI read the post and the companion post: https://vitaut.net/posts/2025/smallest-dtoa/ And there’s one detail I found confusing. Suppose I go through the steps to find the rounding interval and determine that k=-3, so there is at most one integer multiple of 10^-3 in the interval (and at least one multiple of 10^-4). For the sake of argument, let’s say that -3 worked: m·10^-3 is in the interval. Then, if m is not a mu…
Comment linking /posts/2025/smallest-dtoa/
on “Zmij: Faster floating point double-to-string conversion”Submitted Optimizing the unoptimizable: a journey to faster C++ compile times as a story · 73 points
HN discussion{fmt} is commonly used for performance critical code because it provides some of the fastest numeric formatting and I/O: * https://vitaut.net/posts/2020/fast-int-to-string-revisited/ * https://github.com/fmtlib/fmt/pull/1882 * https://vitaut.net/posts/2020/optimal-file-buffer-size/ Here's just one example: https://aras-p.info/blog/2022/02/03/Speeding-up-Blender-.obj...
Comment linking /posts/2020/optimal-file-buffer-size/
on “The C++20 Naughty and Nice List for Game Devs”Submitted Schubfach: The smallest floating point double-to-string impleme as a story · 33 points
HN discussion{fmt} doesn't use reflection and is optimized for build speed using type erasure: https://vitaut.net/posts/2024/faster-cpp-compile-times/
Comment linking /posts/2024/faster-cpp-compile-times/
on “C++26: more constexpr in the core language”Submitted Faster Double-to-String Conversion as a story · 9 points
HN discussionI agree that modules is the right long-term solution and in fact {fmt} is modularized: https://vitaut.net/posts/2023/cxx20-modules-in-clang/ .
Comment linking /posts/2023/cxx20-modules-in-clang/
on “Optimizing the unoptimizable: a journey to faster C++ compile times”Submitted Honey, I shrunk {fmt}: bringing binary size to 14k and ditching the C++ runtime as a story · 7 points
HN discussionNote that {fmt} provides a lightweight API (`fmt/base.h`) with a superset of `printf` functionality and optimized for build speed ( https://vitaut.net/posts/2024/faster-cpp-compile-times/ ) and binary size ( https://vitaut.net/posts/2024/binary-size/ ) through type erasure. Variadic templates, while OK in simple cases, won't scale for more realistic ones (especially once you start adding support for more types) and…
Comment linking /posts/2024/binary-size/
on “A string formatting library in 65 lines of C++”Submitted Schubfach: The smallest double-to-string implementation as a story · 6 points
HN discussionI have recently started re-implementing parts of the standard library myself just to improve compile times (and I did - massively!), but I purposely kept {fmt} around, because I think it's a great library and I thought it would be as fast to compile as you could possibly make it (it likely still is considering what it can do). Also because the dev put a lot of effort into optimizing compile times [1] and seems to be…
Comment linking /posts/2024/faster-cpp-compile-times/
on “A string formatting library in 65 lines of C++”Submitted Double to string conversion in 150 lines of code as a story · 3 points
HN discussionstd::cout is thread-safe but because of the concatenation-based API parts of the message may interleave. C++23 std::print is safe (and the output doesn't interleave). See https://vitaut.net/posts/2023/print-in-cpp23/ .
Comment linking /posts/2023/print-in-cpp23/
on “Tell HN: Python's print function is thread-unsafe”Submitted A complete floating-point to_chars in 18 kB as a story · 2 points
HN discussionThe core of newer methods like yy, xjb and zmij is remarkably simple: https://vitaut.net/posts/2026/yy-dtoa/ . Shortest uscale is basically Schubfach or, rather, it's variant called Teju Jagua and has 2-3 wide multiplications compared to 1 for newer methods. The complexity is optional and comes from squeezing the last few nanoseconds =).
Comment linking /posts/2026/yy-dtoa/
on “Go 1.27 Is Released”Submitted The fastest double-to-string algorithm you've never heard of as a story · 2 points
HN discussionThe shortest double-to-string algorithm is basically Schubfach or, rather, it's variation Tejú Jaguá with digit output from Dragonbox. Schubfach is a beautiful algorithm: I implemented and wrote about it in https://vitaut.net/posts/2025/smallest-dtoa/ . However, in terms of performance you can do much better nowadays. For example, https://github.com/vitaut/zmij does 1 instead of 2-3 costly 128x64-bit multiplications…
Comment linking /posts/2025/smallest-dtoa/
on “Floating-Point Printing and Parsing Can Be Simple and Fast”Submitted The fastest double-to-string algorithm you've never heard of as a story · 2 points
HN discussionSubmitted std::print in C++23 as a story · 2 points
HN discussion