aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Kargl <kargl@FreeBSD.org>2025-09-11 16:38:17 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2025-09-12 02:36:27 +0000
commit8b41ba845c7e10b5f241a1f944fe9a8e19ad75a9 (patch)
tree3f61e3a7e9e40feaae8589a85463bdf9bb20785c
parentd869395ac4bd248da7c5bdc67afb19ca89fbeeee (diff)
lib/msun: cpow{,f,l}(CMLX(0.0, 0.0)) should return 1.0
PR: 289447 MFC after: 1 week
-rw-r--r--lib/msun/src/s_cpow.c5
-rw-r--r--lib/msun/src/s_cpowf.c5
-rw-r--r--lib/msun/src/s_cpowl.c5
3 files changed, 12 insertions, 3 deletions
diff --git a/lib/msun/src/s_cpow.c b/lib/msun/src/s_cpow.c
index b887db51aa2a..2c20a8f3b48b 100644
--- a/lib/msun/src/s_cpow.c
+++ b/lib/msun/src/s_cpow.c
@@ -58,7 +58,10 @@ cpow(double complex a, double complex z)
y = cimag (z);
absa = cabs (a);
if (absa == 0.0) {
- return (CMPLX(0.0, 0.0));
+ if (x == 0 && y == 0)
+ return (CMPLX(1., 0.));
+ else
+ return (CMPLX(0., 0.));
}
arga = carg (a);
r = pow (absa, x);
diff --git a/lib/msun/src/s_cpowf.c b/lib/msun/src/s_cpowf.c
index 144291079f97..b8bdbd9cb07b 100644
--- a/lib/msun/src/s_cpowf.c
+++ b/lib/msun/src/s_cpowf.c
@@ -57,7 +57,10 @@ cpowf(float complex a, float complex z)
y = cimagf(z);
absa = cabsf (a);
if (absa == 0.0f) {
- return (CMPLXF(0.0f, 0.0f));
+ if (x == 0 && y == 0)
+ return (CMPLXF(1.f, 0.f));
+ else
+ return (CMPLXF(0.f, 0.f));
}
arga = cargf (a);
r = powf (absa, x);
diff --git a/lib/msun/src/s_cpowl.c b/lib/msun/src/s_cpowl.c
index 39797cadcfcb..efbe4936895f 100644
--- a/lib/msun/src/s_cpowl.c
+++ b/lib/msun/src/s_cpowl.c
@@ -57,7 +57,10 @@ cpowl(long double complex a, long double complex z)
y = cimagl(z);
absa = cabsl(a);
if (absa == 0.0L) {
- return (CMPLXL(0.0L, 0.0L));
+ if (x == 0 && y == 0)
+ return (CMPLXL(1.L, 0.L));
+ else
+ return (CMPLXL(0.L, 0.L));
}
arga = cargl(a);
r = powl(absa, x);