3 ms·
I have been using Walter Bright's libc code from Zortech-C for microcontrollers, where I care about code size more than anything else: https://github.com/nklab
by jhallenworld 9mo ago
I have been using Walter Bright's libc code from Zortech-C for microcontrollers, where I care about code size more than anything else:
https://github.com/nklabs/libnklabs/blob/main/src/nkprintf_fp.c https://github.com/nklabs/libnklabs/blob/main/src/nkprintf_f...
https://github.com/nklabs/libnklabs/blob/main/src/nkstrtod.c https://github.com/nklabs/libnklabs/blob/main/src/nkstrtod.c
https://github.com/nklabs/libnklabs/blob/main/src/nkdectab.c https://github.com/nklabs/libnklabs/blob/main/src/nkdectab.c
nkprintf_fp.c+nkdectab.c: 2494 bytes
schubfach.cc: 10K bytes.. the code is small, but there is a giant table of numbers. Also this is just dtoa, not a full printf formatter.
OTOH, the old code is not round-trip accurate.
Russ Cox should make a C version of his code..
- nigeltao 9mo ago> Russ Cox should make a C version of his code. https://github.com/rsc/fpfmt/blob/main/bench/uscalec/ftoa.c https://github.com/rsc/fpfmt/blob/main/bench/uscalec/ftoa.c
- vitaut 9mo agoNote that it has the same table of powers of 10: https://github.com/rsc/fpfmt/blob/main/bench/uscalec/pow10.h https://github.com/rsc/fpfmt/blob/main/bench/uscalec/pow10.h
- vitaut 9mo agoIt is possible to compress the table using the technique from Dragonbox (https://github.com/fmtlib/fmt/blob/8b8fccdad40decf68687ec0384f8894ad589615c/include/fmt/format-inl.h#L1050-L1059 https://github.com/fmtlib/fmt/blob/8b8fccdad40decf68687ec038...) at the cost of some perf. It's on my TODO list for zmij.
- thomasmg 9mo agoSchubfach, Ryū, Dragonbox etc support round-tripping and shortest-width, which (it sounds like) is not important for you. The idea of round-tripping is that if you convert a double to a string and then parse that, you get the exact same value. Shortest-width is to correctly round and generate the shortest possible text. I tried to implement a version that does _just_ round-tripping but is not shortest-width, it is around 290 lines for both parsing and toString [1] [1] https://github.com/thomasmueller/bau-lang/blob/main/src/test/java/org/bau/stdlib/string/DoubleUtils.java https://github.com/thomasmueller/bau-lang/blob/main/src/test...