[libc] add atof, strtof and strtod
authorMichael Jones <michaelrj@google.com>
Wed, 1 Sep 2021 23:51:05 +0000 (23:51 +0000)
committerMichael Jones <michaelrj@google.com>
Mon, 18 Oct 2021 23:10:03 +0000 (16:10 -0700)
commit87c016078ad72c46505461e4ff8bfa04819fe7ba
tree91521ff2bbe9ef913e20e0636ee8e7f0d96861f5
parent684b6265b31cabf422b01cd8937a3641c6df914f
[libc] add atof, strtof and strtod

Add the string to floating point conversion functions.
Long doubles aren't supported yet, but floats and doubles are. The
primary algorithm used is the Eisel-Lemire ParseNumberF64 algorithm,
with the Simple Decimal Conversion algorithm as backup.

Links for more information on the algorithms:

Number Parsing at a Gigabyte per Second, Software: Practice and
Experience 51 (8), 2021 (https://arxiv.org/abs/2101.11408)
https://nigeltao.github.io/blog/2020/eisel-lemire.html
https://nigeltao.github.io/blog/2020/parse-number-f64-simple.html

Differential Revision: https://reviews.llvm.org/D109261
24 files changed:
libc/config/linux/x86_64/entrypoints.txt
libc/fuzzing/stdlib/CMakeLists.txt
libc/fuzzing/stdlib/StringParserOutputDiff.h [new file with mode: 0644]
libc/fuzzing/stdlib/atof_fuzz.cpp [new file with mode: 0644]
libc/spec/stdc.td
libc/src/__support/CMakeLists.txt
libc/src/__support/detailed_powers_of_ten.h [new file with mode: 0644]
libc/src/__support/high_precision_decimal.h
libc/src/__support/str_to_float.h [new file with mode: 0644]
libc/src/stdlib/CMakeLists.txt
libc/src/stdlib/atof.cpp [new file with mode: 0644]
libc/src/stdlib/atof.h [new file with mode: 0644]
libc/src/stdlib/strtod.cpp [new file with mode: 0644]
libc/src/stdlib/strtod.h [new file with mode: 0644]
libc/src/stdlib/strtof.cpp [new file with mode: 0644]
libc/src/stdlib/strtof.h [new file with mode: 0644]
libc/test/src/__support/CMakeLists.txt
libc/test/src/__support/str_to_float_comparison_data.txt [new file with mode: 0644]
libc/test/src/__support/str_to_float_comparison_test.cpp [new file with mode: 0644]
libc/test/src/__support/str_to_float_test.cpp [new file with mode: 0644]
libc/test/src/stdlib/CMakeLists.txt
libc/test/src/stdlib/atof_test.cpp [new file with mode: 0644]
libc/test/src/stdlib/strtod_test.cpp [new file with mode: 0644]
libc/test/src/stdlib/strtof_test.cpp [new file with mode: 0644]