[libc-commits] [libc] [llvm] [libc][math] Added missing floating point exception for atanpif16 (PR #186597)
via libc-commits
libc-commits at lists.llvm.org
Sun Mar 15 04:24:39 PDT 2026
================
@@ -119,14 +113,34 @@ LLVM_LIBC_FUNCTION(float16, atanpif16, (float16 x)) {
// Case 1: |x| <= 0.5 - Direct polynomial evaluation
if (LIBC_LIKELY(x_abs <= 0.5)) {
+
+ if (LIBC_UNLIKELY(xbits.is_zero()))
+ return x;
+
+ if (LIBC_UNLIKELY(xbits.uintval() == 0x0a48 || xbits.uintval() == 0x8a48)) {
+ int rounding = fputil::quick_get_round();
+
+ if (rounding == FE_UPWARD && xbits.uintval() == 0x0a48)
+ return fputil::FPBits<float16>(uint16_t(0x0400)).get_val();
+
+ if (rounding == FE_DOWNWARD && xbits.uintval() == 0x8a48)
+ return fputil::FPBits<float16>(uint16_t(0x8400)).get_val();
+ }
+
double result = atanpi_eval(x_abs);
- return signed_result(result);
+ float16 s_result = signed_result(result);
+ if (FPBits(s_result).is_subnormal())
+ fputil::raise_except_if_required(FE_UNDERFLOW);
----------------
lntue wrote:
`fputil::float_cast` does not raise underflow exception?
https://github.com/llvm/llvm-project/pull/186597
More information about the libc-commits
mailing list