_math.h 760 B

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