diff options
| author | Michael Jones <michaelrj@google.com> | 2021-09-01 23:51:05 +0000 |
|---|---|---|
| committer | Michael Jones <michaelrj@google.com> | 2021-10-18 16:10:03 -0700 |
| commit | 87c016078ad72c46505461e4ff8bfa04819fe7ba (patch) | |
| tree | 91521ff2bbe9ef913e20e0636ee8e7f0d96861f5 /libc/src/stdlib/strtod.cpp | |
| parent | 684b6265b31cabf422b01cd8937a3641c6df914f (diff) | |
[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
Diffstat (limited to 'libc/src/stdlib/strtod.cpp')
| -rw-r--r-- | libc/src/stdlib/strtod.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/libc/src/stdlib/strtod.cpp b/libc/src/stdlib/strtod.cpp new file mode 100644 index 000000000000..754918c36789 --- /dev/null +++ b/libc/src/stdlib/strtod.cpp @@ -0,0 +1,20 @@ +//===-- Implementation of strtod ------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "src/stdlib/strtod.h" +#include "src/__support/common.h" +#include "src/__support/str_to_float.h" + +namespace __llvm_libc { + +LLVM_LIBC_FUNCTION(double, strtod, + (const char *__restrict str, char **__restrict str_end)) { + return internal::strtofloatingpoint<double>(str, str_end); +} + +} // namespace __llvm_libc |
