Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--newlib/ChangeLog13
-rw-r--r--newlib/libm/math/w_log.c2
-rw-r--r--newlib/libm/math/w_log10.c2
-rw-r--r--newlib/libm/math/wf_log.c2
-rw-r--r--newlib/libm/math/wf_log10.c2
-rw-r--r--newlib/libm/mathfp/s_logarithm.c16
-rw-r--r--newlib/libm/mathfp/sf_logarithm.c16
7 files changed, 45 insertions, 8 deletions
diff --git a/newlib/ChangeLog b/newlib/ChangeLog
index d964ff3be..6cc23b77c 100644
--- a/newlib/ChangeLog
+++ b/newlib/ChangeLog
@@ -1,5 +1,18 @@
2007-10-17 Jeff Johnston <jjohnstn@redhat.com>
+ * libm/mathfp/s_logarithm.c: Fix error introduced by previous
+ fix when handling negative input values. Make function
+ consistent with math directory and glibc version such that
+ inf and nan values return inf and nan respectively with no
+ errno setting.
+ * libm/mathfp/sf_logarithm.c: Ditto.
+ * libm/math/w_log.c: Set errno to ERANGE when input is 0.0.
+ * libm/math/wf_log.c: Ditto.
+ * libm/math/w_log10.c: Ditto.
+ * libm/math/wf_log10.c: Ditto.
+
+2007-10-17 Jeff Johnston <jjohnstn@redhat.com>
+
* libm/mathfp/s_logarithm.c: Fix case where input is 0 to
return -inf.
* libm/mathfp/sf_logarithm.c: Ditto.
diff --git a/newlib/libm/math/w_log.c b/newlib/libm/math/w_log.c
index e23efd7e6..38896cd25 100644
--- a/newlib/libm/math/w_log.c
+++ b/newlib/libm/math/w_log.c
@@ -95,7 +95,7 @@ PORTABILITY
if (_LIB_VERSION == _POSIX_)
errno = ERANGE;
else if (!matherr(&exc)) {
- errno = EDOM;
+ errno = ERANGE;
}
} else {
/* log(x<0) */
diff --git a/newlib/libm/math/w_log10.c b/newlib/libm/math/w_log10.c
index 7c3966954..66f0e78d1 100644
--- a/newlib/libm/math/w_log10.c
+++ b/newlib/libm/math/w_log10.c
@@ -93,7 +93,7 @@ PORTABILITY
if (_LIB_VERSION == _POSIX_)
errno = ERANGE;
else if (!matherr(&exc)) {
- errno = EDOM;
+ errno = ERANGE;
}
} else {
/* log10(x<0) */
diff --git a/newlib/libm/math/wf_log.c b/newlib/libm/math/wf_log.c
index 369ef3261..989eeb335 100644
--- a/newlib/libm/math/wf_log.c
+++ b/newlib/libm/math/wf_log.c
@@ -53,7 +53,7 @@
if (_LIB_VERSION == _POSIX_)
errno = ERANGE;
else if (!matherr(&exc)) {
- errno = EDOM;
+ errno = ERANGE;
}
} else {
/* logf(x<0) */
diff --git a/newlib/libm/math/wf_log10.c b/newlib/libm/math/wf_log10.c
index 728913500..41dd93a7b 100644
--- a/newlib/libm/math/wf_log10.c
+++ b/newlib/libm/math/wf_log10.c
@@ -54,7 +54,7 @@
if (_LIB_VERSION == _POSIX_)
errno = ERANGE;
else if (!matherr(&exc)) {
- errno = EDOM;
+ errno = ERANGE;
}
} else {
/* log10f(x<0) */
diff --git a/newlib/libm/mathfp/s_logarithm.c b/newlib/libm/mathfp/s_logarithm.c
index 661dd8818..51e7f3066 100644
--- a/newlib/libm/mathfp/s_logarithm.c
+++ b/newlib/libm/mathfp/s_logarithm.c
@@ -100,12 +100,24 @@ _DEFUN (logarithm, (double, int),
int N;
double f, w, z;
- /* Check for domain error here. */
- if (x <= 0.0)
+ /* Check for range and domain errors here. */
+ if (x == 0.0)
{
errno = ERANGE;
return (-z_infinity.d);
}
+ else if (x < 0.0)
+ {
+ errno = EDOM;
+ return (z_notanum.d);
+ }
+ else if (!isfinite(x))
+ {
+ if (isnan(x))
+ return (z_notanum.d);
+ else
+ return (z_infinity.d);
+ }
/* Get the exponent and mantissa where x = f * 2^N. */
f = frexp (x, &N);
diff --git a/newlib/libm/mathfp/sf_logarithm.c b/newlib/libm/mathfp/sf_logarithm.c
index b8564c14c..8aa85e880 100644
--- a/newlib/libm/mathfp/sf_logarithm.c
+++ b/newlib/libm/mathfp/sf_logarithm.c
@@ -38,12 +38,24 @@ _DEFUN (logarithmf, (float, int),
int N;
float f, w, z;
- /* Check for domain error here. */
- if (x <= 0.0)
+ /* Check for domain/range errors here. */
+ if (x == 0.0)
{
errno = ERANGE;
return (-z_infinity_f.f);
}
+ else if (x < 0.0)
+ {
+ errno = EDOM;
+ return (z_notanum_f.f);
+ }
+ else if (!isfinitef(x))
+ {
+ if (isnanf(x))
+ return (z_notanum_f.f);
+ else
+ return (z_infinity_f.f);
+ }
/* Get the exponent and mantissa where x = f * 2^N. */
f = frexpf (x, &N);