• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* log1p(x) = log(1+x).  The log1p function is designed to avoid the
2    significant loss of precision that arises from direct evaluation when x is
3    small. Use the substitute from _math.h on all platforms: it includes
4    workarounds for buggy handling of zeros.
5  */
6 
7 static double
_Py_log1p(double x)8 _Py_log1p(double x)
9 {
10     /* Some platforms (e.g. MacOS X 10.8, see gh-59682) supply a log1p function
11        but don't respect the sign of zero:  log1p(-0.0) gives 0.0 instead of
12        the correct result of -0.0.
13 
14        To save fiddling with configure tests and platform checks, we handle the
15        special case of zero input directly on all platforms.
16     */
17     if (x == 0.0) {
18         return x;
19     }
20     else {
21         return log1p(x);
22     }
23 }
24 
25 #define m_log1p _Py_log1p
26