Login | Register For Free | Help
Search for: (Advanced)

Mailing List Archive: Python: Checkins

cpython (2.7): Add workaround for log1p(-0.0) on platforms where it's broken.

 

 

Python checkins RSS feed   Index | Next | Previous | View Threaded


python-checkins at python

Aug 18, 2012, 4:31 AM

Post #1 of 1 (32 views)
Permalink
cpython (2.7): Add workaround for log1p(-0.0) on platforms where it's broken.

http://hg.python.org/cpython/rev/377036cb13e9
changeset: 78642:377036cb13e9
branch: 2.7
parent: 78639:332566c29ab4
user: Mark Dickinson <mdickinson [at] enthought>
date: Sat Aug 18 12:31:34 2012 +0100
summary:
Add workaround for log1p(-0.0) on platforms where it's broken.

files:
Misc/NEWS | 3 +++
Modules/_math.c | 23 +++++++++++++++++++++++
Modules/_math.h | 8 ++------
3 files changed, 28 insertions(+), 6 deletions(-)


diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -95,6 +95,9 @@
Library
-------

+- Issue #15477: In cmath and math modules, add workaround for platforms whose
+ system-supplied log1p function doesn't respect signs of zeros.
+
- Issue #11062: Fix adding a message from file to Babyl mailbox.

- Issue #15646: Prevent equivalent of a fork bomb when using
diff --git a/Modules/_math.c b/Modules/_math.c
--- a/Modules/_math.c
+++ b/Modules/_math.c
@@ -189,6 +189,27 @@
significant loss of precision that arises from direct evaluation when x is
small. */

+#ifdef HAVE_LOG1P
+
+double
+_Py_log1p(double x)
+{
+ /* Some platforms supply a log1p function but don't respect the sign of
+ zero: log1p(-0.0) gives 0.0 instead of the correct result of -0.0.
+
+ To save fiddling with configure tests and platform checks, we handle the
+ special case of zero input directly on all platforms.
+ */
+ if (x == 0.0) {
+ return x;
+ }
+ else {
+ return log1p(x);
+ }
+}
+
+#else
+
double
_Py_log1p(double x)
{
@@ -230,3 +251,5 @@
return log(1.+x);
}
}
+
+#endif /* ifdef HAVE_LOG1P */
diff --git a/Modules/_math.h b/Modules/_math.h
--- a/Modules/_math.h
+++ b/Modules/_math.h
@@ -36,10 +36,6 @@
#define m_expm1 _Py_expm1
#endif

-#ifdef HAVE_LOG1P
-#define m_log1p log1p
-#else
-/* if the system doesn't have log1p, use the substitute
- function defined in Modules/_math.c. */
+/* Use the substitute from _math.c on all platforms:
+ it includes workarounds for buggy handling of zeros. */
#define m_log1p _Py_log1p
-#endif

--
Repository URL: http://hg.python.org/cpython

Python checkins RSS feed   Index | Next | Previous | View Threaded
 
 


Interested in having your list archived? Contact Gossamer Threads
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.