Skip to content

Commit c6002ff

Browse files
committed
nit
1 parent d8fa4dd commit c6002ff

File tree

2 files changed

+18
-25
lines changed

2 files changed

+18
-25
lines changed

libc/src/math/generic/asinf16.cpp

+18-22
Original file line numberDiff line numberDiff line change
@@ -35,24 +35,23 @@ LLVM_LIBC_FUNCTION(float16, asinf16, (float16 x)) {
3535

3636
// |x| <= 0x1p-1, |x| <= 0.5
3737
if (x_abs <= 0x3800) {
38+
// asinf16(+/-0) = +/-0
39+
if (LIBC_UNLIKELY(x_abs == 0))
40+
return x;
41+
42+
// Exhaustive tests show that,
43+
// for |x| <= 0x1.878p-9, when:
44+
// x > 0, and rounding upward, or
45+
// x < 0, and rounding downward, then,
46+
// asin(x) = x * 2^-11 + x
47+
// else, in other rounding modes,
48+
// asin(x) = x
3849
if (LIBC_UNLIKELY(x_abs <= 0x1a1e)) {
39-
// asinf16(+/-0) = +/-0
40-
if (LIBC_UNLIKELY(x_abs == 0U)) {
41-
return x;
42-
}
43-
44-
// Exhaustive tests show that, when:
45-
// x > 0, and rounding upward, or
46-
// x < 0, and rounding downward, then,
47-
// asin(x) = x * 2^-11 + x
48-
// else, in other rounding modes,
49-
// asin(x) = x
5050
int rounding = fputil::quick_get_round();
5151

5252
if ((xbits.is_pos() && rounding == FE_UPWARD) ||
53-
(xbits.is_neg() && rounding == FE_DOWNWARD)) {
53+
(xbits.is_neg() && rounding == FE_DOWNWARD))
5454
return fputil::cast<float16>(fputil::multiply_add(xf, 0x1.0p-11f, xf));
55-
}
5655
return x;
5756
}
5857

@@ -66,11 +65,8 @@ LLVM_LIBC_FUNCTION(float16, asinf16, (float16 x)) {
6665

6766
// |x| > 1, asinf16(x) = NaN
6867
if (LIBC_UNLIKELY(x_abs > 0x3c00)) {
69-
// |x| <= +/-inf
70-
if (LIBC_UNLIKELY(x_abs <= 0x7c00)) {
71-
fputil::set_errno_if_required(EDOM);
72-
fputil::raise_except_if_required(FE_INVALID);
73-
}
68+
fputil::set_errno_if_required(EDOM);
69+
fputil::raise_except_if_required(FE_INVALID);
7470

7571
return FPBits::quiet_nan().get_val();
7672
}
@@ -91,13 +87,13 @@ LLVM_LIBC_FUNCTION(float16, asinf16, (float16 x)) {
9187
// sin(z/2) = sqrt((1 - x)/2)
9288
// 7: Let u = (1 - x)/2
9389
// 8: Therefore:
94-
// arcsin(sqrt(u)) = z/2
95-
// 2 * arcsin(sqrt(u)) = z
90+
// asin(sqrt(u)) = z/2
91+
// 2 * asin(sqrt(u)) = z
9692
// 9: Recall [3], z = pi/2 - y. Therefore:
9793
// y = pi/2 - z
9894
// y = pi/2 - 2 * arcsin(sqrt(u))
9995
// 10: Recall [1], y = asin(x). Therefore:
100-
// arcsin(x) = pi/2 - 2 * arcsin(sqrt(u))
96+
// asin(x) = pi/2 - 2 * asin(sqrt(u))
10197
//
10298
// WHY?
10399
// 11: Recall [7], u = (1 - x)/2
@@ -109,7 +105,7 @@ LLVM_LIBC_FUNCTION(float16, asinf16, (float16 x)) {
109105

110106
// 0x1p-1 < |x| <= 0x1p0, 0.5 < |x| <= 1.0
111107
float xf_abs = (xf < 0 ? -xf : xf);
112-
float sign = ((xbits.uintval() >> 15) == 1 ? -1.0 : 1.0);
108+
float sign = (xbits.uintval() >> 15 == 1 ? -1.0 : 1.0);
113109
float u = fputil::multiply_add(-0.5f, xf_abs, 0.5f);
114110
float u_sqrt = fputil::sqrt<float>(u);
115111

libc/test/src/math/smoke/asinf16_test.cpp

-3
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,6 @@ using LlvmLibcAsinf16Test = LIBC_NAMESPACE::testing::FPTest<float16>;
1717
TEST_F(LlvmLibcAsinf16Test, SpecialNumbers) {
1818
LIBC_NAMESPACE::libc_errno = 0;
1919

20-
EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::asinf16(aNaN));
21-
EXPECT_MATH_ERRNO(0);
22-
2320
EXPECT_FP_EQ(zero, LIBC_NAMESPACE::asinf16(zero));
2421
EXPECT_MATH_ERRNO(0);
2522

0 commit comments

Comments
 (0)