xref: /third_party/python/Modules/_math.h (revision 7db96d56)
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
7static double
8_Py_log1p(double x)
9{
10    /* Some platforms supply a log1p function but don't respect the sign of
11       zero:  log1p(-0.0) gives 0.0 instead of the correct result of -0.0.
12
13       To save fiddling with configure tests and platform checks, we handle the
14       special case of zero input directly on all platforms.
15    */
16    if (x == 0.0) {
17        return x;
18    }
19    else {
20        return log1p(x);
21    }
22}
23
24#define m_log1p _Py_log1p
25