[libc-commits] [libc] [libc] Add sinpif16 function (PR #110994)
via libc-commits
libc-commits at lists.llvm.org
Thu Oct 3 06:50:41 PDT 2024
github-actions[bot] wrote:
<!--LLVM CODE FORMAT COMMENT: {clang-format}-->
:warning: C/C++ code formatter, clang-format found issues in your code. :warning:
<details>
<summary>
You can test this locally with the following command:
</summary>
``````````bash
git-clang-format --diff 82f5acfbec65e1a645d902f746253eeaf0bd2d70 663fbd51d8992daf763772bc61b5942a5a1e8249 --extensions h,cpp -- libc/src/math/generic/sinpif16.cpp libc/src/math/sinpif16.h libc/test/src/math/smoke/sinpif16_test.cpp
``````````
</details>
<details>
<summary>
View the diff from clang-format here.
</summary>
``````````diff
diff --git a/libc/src/math/generic/sinpif16.cpp b/libc/src/math/generic/sinpif16.cpp
index b878e09d54..eff3871a3b 100644
--- a/libc/src/math/generic/sinpif16.cpp
+++ b/libc/src/math/generic/sinpif16.cpp
@@ -30,9 +30,8 @@ constexpr float PI_OVER_32 = 0x1.921fb6p-4f;
// > TL = chebyshevform(sin(x), 9, [-pi / 32, pi / 32]);
// > TL[0];
const float SIN_COEFF[10] = {
- 0x1.d333p-26, 0x1.000048p0, -0x1.a5d2p-14, -0x1.628588p-3, 0x1.c1eep-5,
- 0x1.4455p1, -0x1.317a8p3, -0x1.6bb9p8, 0x1.00ef8p9, 0x1.0edcp14
-};
+ 0x1.d333p-26, 0x1.000048p0, -0x1.a5d2p-14, -0x1.628588p-3, 0x1.c1eep-5,
+ 0x1.4455p1, -0x1.317a8p3, -0x1.6bb9p8, 0x1.00ef8p9, 0x1.0edcp14};
// In Sollya generate 10 coefficients for a degree-9 chebyshev polynomial
// approximating the sine function in [-pi/32, pi/32] with the following
// commands:
@@ -40,49 +39,78 @@ const float SIN_COEFF[10] = {
// > TL = chebyshevform(cos(x), 9, [-pi / 32, pi / 32]);
// > TL[0];
const float COS_COEFF[10] = {
- 0x1.000006p0, 0x1.e1eap-15, -0x1.0071p-1, -0x1.3b56p-4, 0x1.f3dfp-2,
- 0x1.ccbap4, -0x1.3034p6, -0x1.f817p11, 0x1.fc59p11, 0x1.7079p17
-};
+ 0x1.000006p0, 0x1.e1eap-15, -0x1.0071p-1, -0x1.3b56p-4, 0x1.f3dfp-2,
+ 0x1.ccbap4, -0x1.3034p6, -0x1.f817p11, 0x1.fc59p11, 0x1.7079p17};
// Lookup table for sin(k * pi / 32) with k = 0, ..., 63.
// Table is generated with Sollya as follows:
// > display = hexadecimmal;
// > prec = 24;
// > for k from 0 to 63 do {sin(k * pi/32);};
-const float SIN_K_PI_OVER_32[64] = {
- 0, 0x1.917a6cp-4,
- 0x1.8f8b84p-3, 0x1.294062p-2,
- 0x1.87de2ap-2, 0x1.e2b5d4p-2,
- 0x1.1c73b4p-1, 0x1.44cf32p-1,
- 0x1.6a09e6p-1, 0x1.8bc806p-1,
- 0x1.a9b662p-1, 0x1.c38b3p-1,
- 0x1.d906bcp-1, 0x1.e9f416p-1,
- 0x1.f6297cp-1, 0x1.fd88dap-1,
- 0x1p0, 0x1.fd88dap-1,
- 0x1.f6297cp-1, 0x1.e9f416p-1,
- 0x1.d906bcp-1, 0x1.c38b3p-1,
- 0x1.a9b662p-1, 0x1.8bc806p-1,
- 0x1.6a09e6p-1, 0x1.44cf32p-1,
- 0x1.1c73b4p-1, 0x1.e2b5d4p-2,
- 0x1.87de2ap-2, 0x1.294062p-2,
- 0x1.8f8b84p-3, 0x1.917a6cp-4,
- 0, -0x1.917a6cp-4,
- -0x1.8f8b84p-3, -0x1.294062p-2,
- -0x1.87de2ap-2, -0x1.e2b5d4p-2,
- -0x1.1c73b4p-1, -0x1.44cf32p-1,
- -0x1.6a09e6p-1, -0x1.8bc806p-1,
- -0x1.a9b662p-1, -0x1.c38b3p-1,
- -0x1.d906bcp-1, -0x1.e9f416p-1,
- -0x1.f6297ep-1, -0x1.fd88dap-1,
- -0x1p0, -0x1.fd88dap-1,
- -0x1.f6297cp-1, -0x1.e9f416p-1,
- -0x1.d906bcp-1, -0x1.c38b3p-1,
- -0x1.a9b662p-1, -0x1.8bc806p-1,
- -0x1.6a09e6p-1, -0x1.44cf32p-1,
- -0x1.1c73b4p-1, -0x1.e2b5d4p-2,
- -0x1.87de2ap-2, -0x1.294062p-2,
- -0x1.8f8b84p-3, -0x1.917a6cp-4
-};
+const float SIN_K_PI_OVER_32[64] = {0,
+ 0x1.917a6cp-4,
+ 0x1.8f8b84p-3,
+ 0x1.294062p-2,
+ 0x1.87de2ap-2,
+ 0x1.e2b5d4p-2,
+ 0x1.1c73b4p-1,
+ 0x1.44cf32p-1,
+ 0x1.6a09e6p-1,
+ 0x1.8bc806p-1,
+ 0x1.a9b662p-1,
+ 0x1.c38b3p-1,
+ 0x1.d906bcp-1,
+ 0x1.e9f416p-1,
+ 0x1.f6297cp-1,
+ 0x1.fd88dap-1,
+ 0x1p0,
+ 0x1.fd88dap-1,
+ 0x1.f6297cp-1,
+ 0x1.e9f416p-1,
+ 0x1.d906bcp-1,
+ 0x1.c38b3p-1,
+ 0x1.a9b662p-1,
+ 0x1.8bc806p-1,
+ 0x1.6a09e6p-1,
+ 0x1.44cf32p-1,
+ 0x1.1c73b4p-1,
+ 0x1.e2b5d4p-2,
+ 0x1.87de2ap-2,
+ 0x1.294062p-2,
+ 0x1.8f8b84p-3,
+ 0x1.917a6cp-4,
+ 0,
+ -0x1.917a6cp-4,
+ -0x1.8f8b84p-3,
+ -0x1.294062p-2,
+ -0x1.87de2ap-2,
+ -0x1.e2b5d4p-2,
+ -0x1.1c73b4p-1,
+ -0x1.44cf32p-1,
+ -0x1.6a09e6p-1,
+ -0x1.8bc806p-1,
+ -0x1.a9b662p-1,
+ -0x1.c38b3p-1,
+ -0x1.d906bcp-1,
+ -0x1.e9f416p-1,
+ -0x1.f6297ep-1,
+ -0x1.fd88dap-1,
+ -0x1p0,
+ -0x1.fd88dap-1,
+ -0x1.f6297cp-1,
+ -0x1.e9f416p-1,
+ -0x1.d906bcp-1,
+ -0x1.c38b3p-1,
+ -0x1.a9b662p-1,
+ -0x1.8bc806p-1,
+ -0x1.6a09e6p-1,
+ -0x1.44cf32p-1,
+ -0x1.1c73b4p-1,
+ -0x1.e2b5d4p-2,
+ -0x1.87de2ap-2,
+ -0x1.294062p-2,
+ -0x1.8f8b84p-3,
+ -0x1.917a6cp-4};
int32_t range_reduction(float x, float &y) {
float kf = fputil::nearest_integer(x * 32);
@@ -132,9 +160,9 @@ LLVM_LIBC_FUNCTION(float16, sinpif16, (float16 x)) {
// If value is equal to infinity
if (x_abs == 0x7c00) {
fputil::set_errno_if_required(EDOM);
- fputil::raise_except_if_required(FE_INVALID);
+ fputil::raise_except_if_required(FE_INVALID);
}
-
+
// If value is NaN
return x + FPBits::quiet_nan().get_val();
}
@@ -153,18 +181,14 @@ LLVM_LIBC_FUNCTION(float16, sinpif16, (float16 x)) {
cos_y = 1;
sin_y = 0;
} else {
- cos_y = fputil::polyeval(y * PI_OVER_32,
- COS_COEFF[0], COS_COEFF[1],
- COS_COEFF[2], COS_COEFF[3],
- COS_COEFF[4], COS_COEFF[5],
- COS_COEFF[6], COS_COEFF[7],
- COS_COEFF[8], COS_COEFF[9]);
- sin_y = fputil::polyeval(y * PI_OVER_32,
- SIN_COEFF[0], SIN_COEFF[1],
- SIN_COEFF[2], SIN_COEFF[3],
- SIN_COEFF[4], SIN_COEFF[5],
- SIN_COEFF[6], SIN_COEFF[7],
- SIN_COEFF[8], SIN_COEFF[9]);
+ cos_y = fputil::polyeval(y * PI_OVER_32, COS_COEFF[0], COS_COEFF[1],
+ COS_COEFF[2], COS_COEFF[3], COS_COEFF[4],
+ COS_COEFF[5], COS_COEFF[6], COS_COEFF[7],
+ COS_COEFF[8], COS_COEFF[9]);
+ sin_y = fputil::polyeval(y * PI_OVER_32, SIN_COEFF[0], SIN_COEFF[1],
+ SIN_COEFF[2], SIN_COEFF[3], SIN_COEFF[4],
+ SIN_COEFF[5], SIN_COEFF[6], SIN_COEFF[7],
+ SIN_COEFF[8], SIN_COEFF[9]);
}
return static_cast<float16>(fputil::multiply_add(
``````````
</details>
https://github.com/llvm/llvm-project/pull/110994
More information about the libc-commits
mailing list