[libc-commits] [libc] [libc][math] Fix `tanpif` and `tanpif16` error handling (PR #235296)
Connector Switch via libc-commits
libc-commits at lists.llvm.org
Sat Oct 24 23:10:16 PDT 2026
================
@@ -62,13 +62,22 @@ LIBC_INLINE float tanpif(float x) {
if (LIBC_UNLIKELY(x_abs == 0U))
return x;
+ // tanpi(x) underflows for 0 < |x| <= 0x1.45f3p-128.
+ if (LIBC_UNLIKELY(x_abs <= 0x0028'be60U))
+ fputil::set_errno_if_required(ERANGE);
+
if (LIBC_UNLIKELY(fputil::is_integer(x))) {
// Preserve the input sign for even integers and flip it for odd integers.
Sign sign =
fputil::is_odd_integer(x) ? xbits.sign().negate() : xbits.sign();
return FPBits::zero(sign).get_val();
}
+ // Odd multiples of 1/4 have exact results of +1 or -1.
+ double xd = static_cast<double>(x);
+ if (LIBC_UNLIKELY(fputil::is_odd_integer(4.0 * xd)))
+ return fputil::is_odd_integer(2.0 * xd - 0.5) ? -1.0f : 1.0f;
----------------
c8ef wrote:
Fixed.
https://github.com/llvm/llvm-project/pull/235296
More information about the libc-commits
mailing list