Awesome
itoa - Fast integer to ascii / integer to string conversion
- newest version: jeaiii_to_text.h
- 0 dependency header only - as in absolutely no dependencies on ANY other headers
- fast - fasted tested on vs2019 in x86 and x64 for all digit lengths, uniform random bits, and uniform random digit lengths (latest version is even 25% faster than before) using https://github.com/jeaiii/itoa-benchmark
- small - simple code that produces good compiled code even in debug builds (no nested functions)
- compiles on clang, msvc, and gcc as C++11 or later
- written to specialize well based on integer type (size, signed, unsigned) and possible values determined at compile time
- Thanks to Junekey Jeon for the great write-up here, providing better insight into more rigorous mathematical foundations which eliminated an unneeded addition, and renewing my interest into making an even faster version
Check it out vs. {fmt} on godbolt.org
Disclaimer: This is not a good way to benchmark. It's not very repeatable and google benchmark is compiled in debug, although fmt being mostly header is optimized and inlined well. The performance charts below are much more accurate.
-----------------------------------------------------
Benchmark Time CPU Iterations
-----------------------------------------------------
BM_fmt 16.6 ns 10.5 ns 75504520
BM_jea 10.2 ns 4.13 ns 159688774
Click for interactive performance charts
The last column is uniform random length numbers from 1 to N digits - worst case for branch prediction based on number of digits