Skip to content
/ itoa Public

Fast integer to ascii / integer to string conversion

License

Notifications You must be signed in to change notification settings

jeaiii/itoa

Repository files navigation

itoa - Fast integer to ascii / integer to string conversion

windows

  • 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

The last column is uniform random length numbers from 1 to N digits - worst case for branch prediction based on number of digits

u32toa_chart

jeaiii vs. fmt