Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 17 Jul 2023 05:25:37 GMT
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: be4c7f273508 - main - libm: correctly test for for NaN and Infinity in sinpi(), cospi(), and tanpi()
Message-ID:  <202307170525.36H5PbFo054298@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=be4c7f273508994638b68d2fae742be37d3cb117

commit be4c7f273508994638b68d2fae742be37d3cb117
Author:     Steve Kargl <kargl@FreeBSD.org>
AuthorDate: 2023-07-17 05:19:28 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2023-07-17 05:23:27 +0000

    libm: correctly test for for NaN and Infinity in sinpi(), cospi(), and tanpi()
    
    The current versions of lib/msun/src/s_cospi.c, s_sinpi.c and s_tanpi.c
    all exhibit the same defect. After checking for various numeric ranges,
    they check to see whether the input argument is a NaN or an Infinity.
    However, the code uses a value of 0x7f80000 instead of the correct value
    of 0x7ff00000.
    
    If you review s_cospif.c, s_sinpif.c, and s_tanpif.c, you will see that
    the equivalent statements in these functions are accurate and have
    appropriate source comments.
    
    The impact of these defects is to flag some valid input values as
    invalid and raise a pole error (divide by zero).
    
    Reported by:    Paul Green <Paul.Green@stratus.com>
    PR:     272539
    MFC after:      1 week
---
 lib/msun/src/s_cospi.c | 3 ++-
 lib/msun/src/s_sinpi.c | 3 ++-
 lib/msun/src/s_tanpi.c | 2 +-
 3 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/lib/msun/src/s_cospi.c b/lib/msun/src/s_cospi.c
index 860219efd3e4..2e2f92733a86 100644
--- a/lib/msun/src/s_cospi.c
+++ b/lib/msun/src/s_cospi.c
@@ -138,7 +138,8 @@ cospi(double x)
 		return (j0 & 1 ? -c : c);
 	}
 
-	if (ix >= 0x7f800000)
+	/* x = +-inf or nan. */
+	if (ix >= 0x7ff00000)
 		return (vzero / vzero);
 
 	/*
diff --git a/lib/msun/src/s_sinpi.c b/lib/msun/src/s_sinpi.c
index 858459a5fcb4..bc3759e567a3 100644
--- a/lib/msun/src/s_sinpi.c
+++ b/lib/msun/src/s_sinpi.c
@@ -155,7 +155,8 @@ sinpi(double x)
 		return ((hx & 0x80000000) ? -s : s);
 	}
 
-	if (ix >= 0x7f800000)
+	/* x = +-inf or nan. */
+	if (ix >= 0x7ff00000)
 		return (vzero / vzero);
 
 	/*
diff --git a/lib/msun/src/s_tanpi.c b/lib/msun/src/s_tanpi.c
index 01d4c74367fd..f911d56156b3 100644
--- a/lib/msun/src/s_tanpi.c
+++ b/lib/msun/src/s_tanpi.c
@@ -163,7 +163,7 @@ tanpi(double x)
 	}
 
 	/* x = +-inf or nan. */
-	if (ix >= 0x7f800000)
+	if (ix >= 0x7ff00000)
 		return (vzero / vzero);
 
 	/*



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202307170525.36H5PbFo054298>