[libc-commits] [libc] [libc][math] Implement C23 half precision erf function (PR #179251)
via libc-commits
libc-commits at lists.llvm.org
Mon Feb 2 07:15:28 PST 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-amdgpu
@llvm/pr-subscribers-libc
Author: Anonmiraj (AnonMiraj)
<details>
<summary>Changes</summary>
The implementation reuses the algorithm from `erff`, so I have moved the `ERFF_COEFFS` polynomial coefficients to common_constants.h.
Currently, I haven't figured out how to handle DAZ/FTZ modes correctly, so the smoke test fails.
Closes #<!-- -->133112
---
Patch is 32.31 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/179251.diff
24 Files Affected:
- (modified) libc/config/gpu/amdgpu/entrypoints.txt (+1)
- (modified) libc/config/gpu/nvptx/entrypoints.txt (+1)
- (modified) libc/config/linux/aarch64/entrypoints.txt (+1)
- (modified) libc/config/linux/arm/entrypoints.txt (+1)
- (modified) libc/config/linux/riscv/entrypoints.txt (+1)
- (modified) libc/config/linux/x86_64/entrypoints.txt (+1)
- (modified) libc/config/windows/entrypoints.txt (+1)
- (modified) libc/include/math.yaml (+6)
- (modified) libc/shared/math.h (+1)
- (added) libc/shared/math/erff16.h (+27)
- (modified) libc/src/__support/math/CMakeLists.txt (+13)
- (modified) libc/src/__support/math/common_constants.h (+104)
- (modified) libc/src/__support/math/erff.h (+10-108)
- (added) libc/src/__support/math/erff16.h (+90)
- (modified) libc/src/math/CMakeLists.txt (+1)
- (added) libc/src/math/erff16.h (+21)
- (modified) libc/src/math/generic/CMakeLists.txt (+11)
- (added) libc/src/math/generic/erff16.cpp (+16)
- (modified) libc/test/shared/CMakeLists.txt (+1)
- (modified) libc/test/shared/shared_math_test.cpp (+1)
- (modified) libc/test/src/math/CMakeLists.txt (+12)
- (added) libc/test/src/math/erff16_test.cpp (+43)
- (modified) libc/test/src/math/smoke/CMakeLists.txt (+11)
- (added) libc/test/src/math/smoke/erff16_test.cpp (+55)
``````````diff
diff --git a/libc/config/gpu/amdgpu/entrypoints.txt b/libc/config/gpu/amdgpu/entrypoints.txt
index 0dda7d5c683ec..3c4be4582a967 100644
--- a/libc/config/gpu/amdgpu/entrypoints.txt
+++ b/libc/config/gpu/amdgpu/entrypoints.txt
@@ -312,6 +312,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.dmull
libc.src.math.dsqrtl
libc.src.math.erff
+ libc.src.math.erff16
libc.src.math.exp
libc.src.math.exp10
libc.src.math.exp10f
diff --git a/libc/config/gpu/nvptx/entrypoints.txt b/libc/config/gpu/nvptx/entrypoints.txt
index 6070fb5b17b3c..f3c44a616dc02 100644
--- a/libc/config/gpu/nvptx/entrypoints.txt
+++ b/libc/config/gpu/nvptx/entrypoints.txt
@@ -312,6 +312,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.dmull
libc.src.math.dsqrtl
libc.src.math.erff
+ libc.src.math.erff16
libc.src.math.exp
libc.src.math.exp10
libc.src.math.exp10f
diff --git a/libc/config/linux/aarch64/entrypoints.txt b/libc/config/linux/aarch64/entrypoints.txt
index 970c825bbfc96..232d23c5b4c4f 100644
--- a/libc/config/linux/aarch64/entrypoints.txt
+++ b/libc/config/linux/aarch64/entrypoints.txt
@@ -453,6 +453,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.dsqrtl
libc.src.math.dsubl
libc.src.math.erff
+ libc.src.math.erff16
libc.src.math.exp
libc.src.math.exp10
libc.src.math.exp10f
diff --git a/libc/config/linux/arm/entrypoints.txt b/libc/config/linux/arm/entrypoints.txt
index f04ac40145d3a..e386686213207 100644
--- a/libc/config/linux/arm/entrypoints.txt
+++ b/libc/config/linux/arm/entrypoints.txt
@@ -275,6 +275,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.dfmal
libc.src.math.dsqrtl
libc.src.math.erff
+ libc.src.math.erff16
libc.src.math.exp
libc.src.math.exp10
libc.src.math.exp10f
diff --git a/libc/config/linux/riscv/entrypoints.txt b/libc/config/linux/riscv/entrypoints.txt
index 7baf4de9d8a5b..7b4084ad7690f 100644
--- a/libc/config/linux/riscv/entrypoints.txt
+++ b/libc/config/linux/riscv/entrypoints.txt
@@ -457,6 +457,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.dsqrtl
libc.src.math.dsubl
libc.src.math.erff
+ libc.src.math.erff16
libc.src.math.exp
libc.src.math.exp10
libc.src.math.exp10f
diff --git a/libc/config/linux/x86_64/entrypoints.txt b/libc/config/linux/x86_64/entrypoints.txt
index 9399b284fa2da..120b14b8c9ea2 100644
--- a/libc/config/linux/x86_64/entrypoints.txt
+++ b/libc/config/linux/x86_64/entrypoints.txt
@@ -499,6 +499,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.ddivl
libc.src.math.dsubl
libc.src.math.erff
+ libc.src.math.erff16
libc.src.math.exp
libc.src.math.exp10
libc.src.math.exp10f
diff --git a/libc/config/windows/entrypoints.txt b/libc/config/windows/entrypoints.txt
index 3a76595b258e2..2b3e43b6ada42 100644
--- a/libc/config/windows/entrypoints.txt
+++ b/libc/config/windows/entrypoints.txt
@@ -157,6 +157,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.dfmal
libc.src.math.dsubl
libc.src.math.erff
+ libc.src.math.erff16
libc.src.math.exp
libc.src.math.expf
libc.src.math.exp10
diff --git a/libc/include/math.yaml b/libc/include/math.yaml
index afd3ae33305c1..8c333a2064379 100644
--- a/libc/include/math.yaml
+++ b/libc/include/math.yaml
@@ -396,6 +396,12 @@ functions:
return_type: float
arguments:
- type: float
+ - name: erff16
+ standards:
+ - stdc
+ return_type: _Float16
+ arguments:
+ - type: _Float16
- name: exp
standards:
- stdc
diff --git a/libc/shared/math.h b/libc/shared/math.h
index b58d29d1ee480..d785f857091e9 100644
--- a/libc/shared/math.h
+++ b/libc/shared/math.h
@@ -43,6 +43,7 @@
#include "math/dfmal.h"
#include "math/dsqrtl.h"
#include "math/erff.h"
+#include "math/erff16.h"
#include "math/exp.h"
#include "math/exp10.h"
#include "math/exp10f.h"
diff --git a/libc/shared/math/erff16.h b/libc/shared/math/erff16.h
new file mode 100644
index 0000000000000..9e9f3f5c8e13e
--- /dev/null
+++ b/libc/shared/math/erff16.h
@@ -0,0 +1,27 @@
+//===-- Shared erff16 function ----------------------------------*- C++ -*-===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_SHARED_MATH_ERFF16_H
+#define LLVM_LIBC_SHARED_MATH_ERFF16_H
+
+#ifdef LIBC_TYPES_HAS_FLOAT16
+
+#include "shared/libc_common.h"
+#include "src/__support/math/erff16.h"
+
+namespace LIBC_NAMESPACE_DECL {
+namespace shared {
+
+using math::erff16;
+
+} // namespace shared
+} // namespace LIBC_NAMESPACE_DECL
+
+#endif // LIBC_TYPES_HAS_FLOAT16
+
+#endif // LLVM_LIBC_SHARED_MATH_ERFF16_H
diff --git a/libc/src/__support/math/CMakeLists.txt b/libc/src/__support/math/CMakeLists.txt
index 58e4040911f8e..e2fc40e6bfca1 100644
--- a/libc/src/__support/math/CMakeLists.txt
+++ b/libc/src/__support/math/CMakeLists.txt
@@ -512,6 +512,19 @@ add_header_library(
erff
HDRS
erff.h
+ DEPENDS
+ .common_constants
+ libc.src.__support.FPUtil.fp_bits
+ libc.src.__support.FPUtil.except_value_utils
+ libc.src.__support.FPUtil.multiply_add
+ libc.src.__support.FPUtil.polyeval
+ libc.src.__support.macros.optimization
+)
+
+add_header_library(
+ erff16
+ HDRS
+ erff16.h
DEPENDS
libc.src.__support.FPUtil.fp_bits
libc.src.__support.FPUtil.except_value_utils
diff --git a/libc/src/__support/math/common_constants.h b/libc/src/__support/math/common_constants.h
index 53abbfeef3412..d99a396bd4f63 100644
--- a/libc/src/__support/math/common_constants.h
+++ b/libc/src/__support/math/common_constants.h
@@ -574,6 +574,110 @@ static constexpr double EXP_M2[128] = {
0x1.568bb722dd593p1, 0x1.593b7d72305bbp1,
};
+// Polynomials approximating erf(x)/x on ( k/8, (k + 1)/8 ) generated by
+// Sollya with: > P = fpminimax(erf(x)/x, [|0, 2, 4, 6, 8, 10, 12, 14|],
+// [|D...|],
+// [k/8, (k + 1)/8]);
+// for k = 0..31.
+constexpr double ERFF_COEFFS[32][8] = {
+ {0x1.20dd750429b6dp0, -0x1.812746b037753p-2, 0x1.ce2f219e8596ap-4,
+ -0x1.b82cdacb78fdap-6, 0x1.56479297dfda5p-8, -0x1.8b3ac5455ef02p-11,
+ -0x1.126fcac367e3bp-8, 0x1.2d0bdb3ba4984p-4},
+ {0x1.20dd750429b6dp0, -0x1.812746b0379a8p-2, 0x1.ce2f21a03cf2ap-4,
+ -0x1.b82ce30de083ep-6, 0x1.565bcad3eb60fp-8, -0x1.c02c66f659256p-11,
+ 0x1.f92f673385229p-14, -0x1.def402648ae9p-17},
+ {0x1.20dd750429b34p0, -0x1.812746b032dcep-2, 0x1.ce2f219d84aaep-4,
+ -0x1.b82ce22dcf139p-6, 0x1.565b9efcd4af1p-8, -0x1.c021f1af414bcp-11,
+ 0x1.f7c6d177eff82p-14, -0x1.c9e4410dcf865p-17},
+ {0x1.20dd750426eabp0, -0x1.812746ae592c7p-2, 0x1.ce2f211525f14p-4,
+ -0x1.b82ccc125e63fp-6, 0x1.56596f261cfd3p-8, -0x1.bfde1ff8eeecfp-11,
+ 0x1.f31a9d15dc5d8p-14, -0x1.a5a4362844b3cp-17},
+ {0x1.20dd75039c705p0, -0x1.812746777e74dp-2, 0x1.ce2f17af98a1bp-4,
+ -0x1.b82be4b817cbep-6, 0x1.564bec2e2962ep-8, -0x1.bee86f9da3558p-11,
+ 0x1.e9443689dc0ccp-14, -0x1.79c0f230805d8p-17},
+ {0x1.20dd74f811211p0, -0x1.81274371a3e8fp-2, 0x1.ce2ec038262e5p-4,
+ -0x1.b8265b82c5e1fp-6, 0x1.5615a2e239267p-8, -0x1.bc63ae023dcebp-11,
+ 0x1.d87c2102f7e06p-14, -0x1.49584bea41d62p-17},
+ {0x1.20dd746d063e3p0, -0x1.812729a8a950fp-2, 0x1.ce2cb0a2df232p-4,
+ -0x1.b80eca1f51278p-6, 0x1.5572e26c46815p-8, -0x1.b715e5638b65ep-11,
+ 0x1.bfbb195484968p-14, -0x1.177a565c15c52p-17},
+ {0x1.20dd701b44486p0, -0x1.812691145f237p-2, 0x1.ce23a06b8cfd9p-4,
+ -0x1.b7c1dc7245288p-6, 0x1.53e92f7f397ddp-8, -0x1.ad97cc4acf0b2p-11,
+ 0x1.9f028b2b09b71p-14, -0x1.cdc4da08da8c1p-18},
+ {0x1.20dd5715ac332p0, -0x1.8123e680bd0ebp-2, 0x1.ce0457aded691p-4,
+ -0x1.b6f52d52bed4p-6, 0x1.50c291b84414cp-8, -0x1.9ea246b1ad4a9p-11,
+ 0x1.77654674e0cap-14, -0x1.737c11a1bcebbp-18},
+ {0x1.20dce6593e114p0, -0x1.811a59c02eadcp-2, 0x1.cdab53c7cd7d5p-4,
+ -0x1.b526d2e321eedp-6, 0x1.4b1d32cd8b994p-8, -0x1.8963143ec0a1ep-11,
+ 0x1.4ad5700e4db91p-14, -0x1.231e100e43ef2p-18},
+ {0x1.20db48bfd5a62p0, -0x1.80fdd84f9e308p-2, 0x1.ccd340d462983p-4,
+ -0x1.b196a2928768p-6, 0x1.4210c2c13a0f7p-8, -0x1.6dbdfb4ff71aep-11,
+ 0x1.1bca2d17fbd71p-14, -0x1.bca36f90c7cf5p-19},
+ {0x1.20d64b2f8f508p0, -0x1.80b4d4f19fa8bp-2, 0x1.cb088197262e3p-4,
+ -0x1.ab51fd02e5b99p-6, 0x1.34e1e5e81a632p-8, -0x1.4c66377b502cep-11,
+ 0x1.d9ad25066213cp-15, -0x1.4b0df7dd0cfa1p-19},
+ {0x1.20c8fc1243576p0, -0x1.8010cb2009e27p-2, 0x1.c7a47e9299315p-4,
+ -0x1.a155be5683654p-6, 0x1.233502694997bp-8, -0x1.26c94b7d813p-11,
+ 0x1.8094f1de25fb9p-15, -0x1.e0e3d776c6eefp-20},
+ {0x1.20a9bd1611bc1p0, -0x1.7ec7fbce83f9p-2, 0x1.c1d757d7317b7p-4,
+ -0x1.92c160cd589fp-6, 0x1.0d307269cc5c2p-8, -0x1.fda5b0d2d1879p-12,
+ 0x1.2fdd7b3b14a7fp-15, -0x1.54eed4a26af5ap-20},
+ {0x1.20682834f943dp0, -0x1.7c73f747bf5a9p-2, 0x1.b8c2db4a9ffd1p-4,
+ -0x1.7f0e4ffe989ecp-6, 0x1.e7061eae4166ep-9, -0x1.ad36e873fff2dp-12,
+ 0x1.d39222396128ep-16, -0x1.d83dacec5ea6bp-21},
+ {0x1.1feb8d12676d7p0, -0x1.7898347284afep-2, 0x1.aba3466b34451p-4,
+ -0x1.663adc573e2f9p-6, 0x1.ae99fb17c3e08p-9, -0x1.602f950ad5535p-12,
+ 0x1.5e9717490609dp-16, -0x1.3fca107bbc8d5p-21},
+ {0x1.1f12fe3c536fap0, -0x1.72b1d1f22e6d3p-2, 0x1.99fc0eed4a896p-4,
+ -0x1.48db0a87bd8c6p-6, 0x1.73e368895aa61p-9, -0x1.19b35d5301fc8p-12,
+ 0x1.007987e4bb033p-16, -0x1.a7edcd4c2dc7p-22},
+ {0x1.1db7b0df84d5dp0, -0x1.6a4e4a41cde02p-2, 0x1.83bbded16455dp-4,
+ -0x1.2809b3b36977ep-6, 0x1.39c08bab44679p-9, -0x1.b7b45a70ed119p-13,
+ 0x1.6e99b36410e7bp-17, -0x1.13619bb7ebc0cp-22},
+ {0x1.1bb1c85c4a527p0, -0x1.5f23b99a249a3p-2, 0x1.694c91fa0d12cp-4,
+ -0x1.053e1ce11c72dp-6, 0x1.02bf72c50ea78p-9, -0x1.4f478fb56cb02p-13,
+ 0x1.005f80ecbe213p-17, -0x1.5f2446bde7f5bp-23},
+ {0x1.18dec3bd51f9dp0, -0x1.5123f58346186p-2, 0x1.4b8a1ca536ab4p-4,
+ -0x1.c4243015cc723p-7, 0x1.a1a8a01d351efp-10, -0x1.f466b34f1d86bp-14,
+ 0x1.5f835eea0bf6ap-18, -0x1.b83165b939234p-24},
+ {0x1.152804c3369f4p0, -0x1.4084cd4afd4bcp-2, 0x1.2ba2e836e47aap-4,
+ -0x1.800f2dfc6904bp-7, 0x1.4a6daf0669c59p-10, -0x1.6e326ab872317p-14,
+ 0x1.d9761a6a755a5p-19, -0x1.0fca33f9dd4b5p-24},
+ {0x1.1087ad68356aap0, -0x1.2dbb044707459p-2, 0x1.0aea8ceaa0384p-4,
+ -0x1.40b516d52b3d2p-7, 0x1.00c9e05f01d22p-10, -0x1.076afb0dc0ff7p-14,
+ 0x1.39fadec400657p-19, -0x1.4b5761352e7e3p-25},
+ {0x1.0b0a7a8ba4a22p0, -0x1.196990d22d4a1p-2, 0x1.d5551e6ac0c4dp-5,
+ -0x1.07cce1770bd1ap-7, 0x1.890347b8848bfp-11, -0x1.757ec96750b6ap-15,
+ 0x1.9b258a1e06bcep-20, -0x1.8fc6d22da7572p-26},
+ {0x1.04ce2be70fb47p0, -0x1.0449e4b0b9cacp-2, 0x1.97f7424f4b0e7p-5,
+ -0x1.ac825439c42f4p-8, 0x1.28f5f65426dfbp-11, -0x1.05b699a90f90fp-15,
+ 0x1.0a888eecf4593p-20, -0x1.deace2b32bb31p-27},
+ {0x1.fbf9fb0e11cc8p-1, -0x1.de2640856545ap-3, 0x1.5f5b1f47f851p-5,
+ -0x1.588bc71eb41b9p-8, 0x1.bc6a0a772f56dp-12, -0x1.6b9fad1f1657ap-16,
+ 0x1.573204ba66504p-21, -0x1.1d38065c94e44p-27},
+ {0x1.ed8f18c99e031p-1, -0x1.b4cb6acd903b4p-3, 0x1.2c7f3dddd6fc1p-5,
+ -0x1.13052067df4ep-8, 0x1.4a5027444082fp-12, -0x1.f672bab0e2554p-17,
+ 0x1.b83c756348cc9p-22, -0x1.534f1a1079499p-28},
+ {0x1.debd33044166dp-1, -0x1.8d7cd9053f7d8p-3, 0x1.ff9957fb3d6e7p-6,
+ -0x1.b50be55de0f36p-9, 0x1.e92c8ec53a628p-13, -0x1.5a4b88d508007p-17,
+ 0x1.1a27737559e26p-22, -0x1.942ae62cb2c14p-29},
+ {0x1.cfdbf0386f3bdp-1, -0x1.68e33d93b0dc4p-3, 0x1.b2683d58f53dep-6,
+ -0x1.5a9174e70d26fp-9, 0x1.69ddd326d49cdp-13, -0x1.dd8f397a8219cp-18,
+ 0x1.6a755016ad4ddp-23, -0x1.e366e0139187dp-30},
+ {0x1.c132adb8d7464p-1, -0x1.475a899f61b46p-3, 0x1.70a431397a77cp-6,
+ -0x1.12e3d35beeee2p-9, 0x1.0c16b05738333p-13, -0x1.4a47f873e144ep-18,
+ 0x1.d3d494c698c02p-24, -0x1.2302c59547fe5p-30},
+ {0x1.b2f5fd05555e7p-1, -0x1.28feefbe03ec7p-3, 0x1.3923acbb3a676p-6,
+ -0x1.b4ff793cd6358p-10, 0x1.8ea0eb8c913bcp-14, -0x1.cb31ec2baceb1p-19,
+ 0x1.30011e7e80c04p-24, -0x1.617710635cb1dp-31},
+ {0x1.a54853cd9593ep-1, -0x1.0dbdbaea4dc8ep-3, 0x1.0a93e2c20a0fdp-6,
+ -0x1.5c969ff401ea8p-10, 0x1.29e0cc64fe627p-14, -0x1.4160d8e9d3c2ap-19,
+ 0x1.8e7b67594624ap-25, -0x1.b1cf2c975b09bp-32},
+ {0x1.983ceece09ff8p-1, -0x1.eacc78f7a2dp-4, 0x1.c74418410655fp-7,
+ -0x1.1756a050e441ep-10, 0x1.bff3650f7f548p-15, -0x1.c56c0217d3adap-20,
+ 0x1.07b4918d0b489p-25, -0x1.0d4be8c1c50f8p-32},
+};
+
} // namespace common_constants_internal
} // namespace LIBC_NAMESPACE_DECL
diff --git a/libc/src/__support/math/erff.h b/libc/src/__support/math/erff.h
index b81be30f7b8f9..339bb8089543b 100644
--- a/libc/src/__support/math/erff.h
+++ b/libc/src/__support/math/erff.h
@@ -9,6 +9,7 @@
#ifndef LLVM_LIBC_SRC___SUPPORT_MATH_ERFF_H
#define LLVM_LIBC_SRC___SUPPORT_MATH_ERFF_H
+#include "common_constants.h" // ERFF_COEFFS
#include "src/__support/FPUtil/FPBits.h"
#include "src/__support/FPUtil/except_value_utils.h"
#include "src/__support/FPUtil/multiply_add.h"
@@ -20,110 +21,7 @@ namespace LIBC_NAMESPACE_DECL {
namespace math {
LIBC_INLINE static constexpr float erff(float x) {
-
- // Polynomials approximating erf(x)/x on ( k/8, (k + 1)/8 ) generated by
- // Sollya with: > P = fpminimax(erf(x)/x, [|0, 2, 4, 6, 8, 10, 12, 14|],
- // [|D...|],
- // [k/8, (k + 1)/8]);
- // for k = 0..31.
- constexpr double COEFFS[32][8] = {
- {0x1.20dd750429b6dp0, -0x1.812746b037753p-2, 0x1.ce2f219e8596ap-4,
- -0x1.b82cdacb78fdap-6, 0x1.56479297dfda5p-8, -0x1.8b3ac5455ef02p-11,
- -0x1.126fcac367e3bp-8, 0x1.2d0bdb3ba4984p-4},
- {0x1.20dd750429b6dp0, -0x1.812746b0379a8p-2, 0x1.ce2f21a03cf2ap-4,
- -0x1.b82ce30de083ep-6, 0x1.565bcad3eb60fp-8, -0x1.c02c66f659256p-11,
- 0x1.f92f673385229p-14, -0x1.def402648ae9p-17},
- {0x1.20dd750429b34p0, -0x1.812746b032dcep-2, 0x1.ce2f219d84aaep-4,
- -0x1.b82ce22dcf139p-6, 0x1.565b9efcd4af1p-8, -0x1.c021f1af414bcp-11,
- 0x1.f7c6d177eff82p-14, -0x1.c9e4410dcf865p-17},
- {0x1.20dd750426eabp0, -0x1.812746ae592c7p-2, 0x1.ce2f211525f14p-4,
- -0x1.b82ccc125e63fp-6, 0x1.56596f261cfd3p-8, -0x1.bfde1ff8eeecfp-11,
- 0x1.f31a9d15dc5d8p-14, -0x1.a5a4362844b3cp-17},
- {0x1.20dd75039c705p0, -0x1.812746777e74dp-2, 0x1.ce2f17af98a1bp-4,
- -0x1.b82be4b817cbep-6, 0x1.564bec2e2962ep-8, -0x1.bee86f9da3558p-11,
- 0x1.e9443689dc0ccp-14, -0x1.79c0f230805d8p-17},
- {0x1.20dd74f811211p0, -0x1.81274371a3e8fp-2, 0x1.ce2ec038262e5p-4,
- -0x1.b8265b82c5e1fp-6, 0x1.5615a2e239267p-8, -0x1.bc63ae023dcebp-11,
- 0x1.d87c2102f7e06p-14, -0x1.49584bea41d62p-17},
- {0x1.20dd746d063e3p0, -0x1.812729a8a950fp-2, 0x1.ce2cb0a2df232p-4,
- -0x1.b80eca1f51278p-6, 0x1.5572e26c46815p-8, -0x1.b715e5638b65ep-11,
- 0x1.bfbb195484968p-14, -0x1.177a565c15c52p-17},
- {0x1.20dd701b44486p0, -0x1.812691145f237p-2, 0x1.ce23a06b8cfd9p-4,
- -0x1.b7c1dc7245288p-6, 0x1.53e92f7f397ddp-8, -0x1.ad97cc4acf0b2p-11,
- 0x1.9f028b2b09b71p-14, -0x1.cdc4da08da8c1p-18},
- {0x1.20dd5715ac332p0, -0x1.8123e680bd0ebp-2, 0x1.ce0457aded691p-4,
- -0x1.b6f52d52bed4p-6, 0x1.50c291b84414cp-8, -0x1.9ea246b1ad4a9p-11,
- 0x1.77654674e0cap-14, -0x1.737c11a1bcebbp-18},
- {0x1.20dce6593e114p0, -0x1.811a59c02eadcp-2, 0x1.cdab53c7cd7d5p-4,
- -0x1.b526d2e321eedp-6, 0x1.4b1d32cd8b994p-8, -0x1.8963143ec0a1ep-11,
- 0x1.4ad5700e4db91p-14, -0x1.231e100e43ef2p-18},
- {0x1.20db48bfd5a62p0, -0x1.80fdd84f9e308p-2, 0x1.ccd340d462983p-4,
- -0x1.b196a2928768p-6, 0x1.4210c2c13a0f7p-8, -0x1.6dbdfb4ff71aep-11,
- 0x1.1bca2d17fbd71p-14, -0x1.bca36f90c7cf5p-19},
- {0x1.20d64b2f8f508p0, -0x1.80b4d4f19fa8bp-2, 0x1.cb088197262e3p-4,
- -0x1.ab51fd02e5b99p-6, 0x1.34e1e5e81a632p-8, -0x1.4c66377b502cep-11,
- 0x1.d9ad25066213cp-15, -0x1.4b0df7dd0cfa1p-19},
- {0x1.20c8fc1243576p0, -0x1.8010cb2009e27p-2, 0x1.c7a47e9299315p-4,
- -0x1.a155be5683654p-6, 0x1.233502694997bp-8, -0x1.26c94b7d813p-11,
- 0x1.8094f1de25fb9p-15, -0x1.e0e3d776c6eefp-20},
- {0x1.20a9bd1611bc1p0, -0x1.7ec7fbce83f9p-2, 0x1.c1d757d7317b7p-4,
- -0x1.92c160cd589fp-6, 0x1.0d307269cc5c2p-8, -0x1.fda5b0d2d1879p-12,
- 0x1.2fdd7b3b14a7fp-15, -0x1.54eed4a26af5ap-20},
- {0x1.20682834f943dp0, -0x1.7c73f747bf5a9p-2, 0x1.b8c2db4a9ffd1p-4,
- -0x1.7f0e4ffe989ecp-6, 0x1.e7061eae4166ep-9, -0x1.ad36e873fff2dp-12,
- 0x1.d39222396128ep-16, -0x1.d83dacec5ea6bp-21},
- {0x1.1feb8d12676d7p0, -0x1.7898347284afep-2, 0x1.aba3466b34451p-4,
- -0x1.663adc573e2f9p-6, 0x1.ae99fb17c3e08p-9, -0x1.602f950ad5535p-12,
- 0x1.5e9717490609dp-16, -0x1.3fca107bbc8d5p-21},
- {0x1.1f12fe3c536fap0, -0x1.72b1d1f22e6d3p-2, 0x1.99fc0eed4a896p-4,
- -0x1.48db0a87bd8c6p-6, 0x1.73e368895aa61p-9, -0x1.19b35d5301fc8p-12,
- 0x1.007987e4bb033p-16, -0x1.a7edcd4c2dc7p-22},
- {0x1.1db7b0df84d5dp0, -0x1.6a4e4a41cde02p-2, 0x1.83bbded16455dp-4,
- -0x1.2809b3b36977ep-6, 0x1.39c08bab44679p-9, -0x1.b7b45a70ed119p-13,
- 0x1.6e99b36410e7bp-17, -0x1.13619bb7ebc0cp-22},
- {0x1.1bb1c85c4a527p0, -0x1.5f23b99a249a3p-2, 0x1.694c91fa0d12cp-4,
- -0x1.053e1ce11c72dp-6, 0x1.02bf72c50ea78p-9, -0x1.4f478fb56cb02p-13,
- 0x1.005f80ecbe213p-17, -0x1.5f2446bde7f5bp-23},
- {0x1.18dec3bd51f9dp0, -0x1.5123f58346186p-2, 0x1.4b8a1ca536ab4p-4,
- -0x1.c4243015cc723p-7, 0x1.a1a8a01d351efp-10, -0x1.f466b34f1d86bp-14,
- 0x1.5f835eea0bf6ap-18, -0x1.b83165b939234p-24},
- {0x1.152804c3369f4p0, -0x1.4084cd4afd4bcp-2, 0x1.2ba2e836e47aap-4,
- -0x1.800f2dfc6904bp-7, 0x1.4a6daf0669c59p-10, -0x1.6e326ab872317p-14,
- 0x1.d9761a6a755a5p-19, -0x1.0fca33f9dd4b5p-24},
- {0x1.1087ad68356aap0, -0x1.2dbb044707459p-2, 0x1.0aea8ceaa0384p-4,
- -0x1.40b516d52b3d2p-7, 0x1.00c9e05f01d22p-10, -0x1.076afb0dc0ff7p-14,
- 0x1.39fadec400657p-19, -0x1.4b5761352e7e3p-25},
- {0x1.0b0a7a8ba4a22p0, -0x1.196990d22d4a1p-2, 0x1.d5551e6ac0c4dp-5,
- -0x1.07cce1770bd1ap-7, 0x1.890347b8848bfp-11, -0x1.757ec96750b6ap-15,
- 0x1.9b258a1e06bcep-20, -0x1.8fc6d22da7572p-26},
- {0x1.04ce2be70fb47p0, -0x1.0449e4b0b9cacp-2, 0x1.97f7424f4b0e7p-5,
- -0x1.ac825439c42f4p-8, 0x1.28f5f65426dfbp-11, -0x1.05b699a90f90fp-15,
- 0x1.0a888eecf4593p-20, -0x1.deace2b32bb31p-27},
- {0x1.fbf9fb0e11cc8p-1, -0x1.de2640856545ap-3, 0x1.5f5b1f47f851p-5,
- -0x1.588bc71eb41b9p-8, 0x1.bc6a0a772f56dp-12, -0x1.6b9fad1f1657ap-16,
- 0x1.573204ba66504p-21, -0x1.1d38065c94e44p-27},
- {0x1.ed8f18c99e031p-1, -0x1.b4cb6acd903b4p-3, 0x1.2c7f3dddd6fc1p-5,
- -0x1.13052067df4ep-8, 0x1.4a5027444082fp-12, -0x1.f672bab0e2554p-17,
- 0x1.b83c756348cc9p-22, -0x1.534f1a1079499p-28},
- {0x1.debd33044166dp-1, -0x1.8d7cd9053f7d8p-3, 0x1.ff9957fb3d6e7p-6,
- -0x1.b50be55de0f36p-9, 0x1.e92c8ec53a628p-13, -0x1.5a4b88d508007p-17,
- 0x1.1a27737559e26p-22, -0x1.942ae62cb2c14p-29},
- {0x1.cfdbf0386f3bdp-1, -0x1.68e33d93b0dc4p-3, 0x1.b2683d58f53dep-6,
- -0x1.5a9174e70d26fp-9, 0x1.69ddd326d49cdp-13, -0x1.dd8f397a8219cp-18,
- 0x1.6a755016ad4ddp-23, -0x1.e366e0139187dp-30},
- {0x1.c132adb8d7464p-1, -0x1.475a899f61b46p-3, 0x1.70a431397a77cp-6,
- -0x1.12e3d35beeee2p-9, 0x1.0c16b05738333p-13, -0x1.4a47f873e144ep-18,
- 0x1.d3d494c698c02p-24, -0x1.2302c59547fe5p-30},
- {0x1.b2f5fd05555e7p-1, -0x1.28feefbe03ec7p-3, 0x1.3923acbb3a676p-6,
- -0x1.b4ff793cd6358p-10, 0x1.8ea0eb8c913bcp-14, -0x1.cb31ec2baceb1p-19,
- 0x1.30011e7e80c04p-24, -0x1.617710635cb1dp-31},
- {0x1.a54853cd9593ep-1, -0x1.0dbdbaea4dc8ep-3, 0x1.0a93e2c20a0fdp-6,
- -0x1.5c969ff401ea8p-10, 0x1.29e0cc64fe627p-14, -0x1.4160d8e9d3c2ap-19,
- 0x1.8e7b67594624ap-25, -0x1.b1cf2c975b09bp-32},
- {0x1.983ceece09ff8p-1, -0x1.eacc78f7a2dp-4, 0x1.c74418410655fp-7,
- -0x1.1756a050e441ep-10, 0x1.bff3650f7f548p-15, -0x1.c56c0217d3adap-20,
- 0x1.07b4918d0b489p-25, -0x1.0d4be8c1c50f8p-32},
- };
+ using namespace common_constants_internal;
using FPBits = typename fputil::FPBits<float>;
FPBits xbits(x);
@@ -174,10 +72,14 @@ LIBC_INLINE static constexpr float erff(float x) {
int idx = static_cast<int>(FPBits(x_abs + EIGHT).get_val(...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/179251
More information about the libc-commits
mailing list