fabs.c 509 B

123456789101112131415161718192021222324252627282930
  1. #include <common/math.h>
  2. #include <common/sys/types.h>
  3. #include "libm.h"
  4. double fabs(double x)
  5. {
  6. union
  7. {
  8. double f;
  9. uint64_t i;
  10. } u = {x};
  11. u.i &= -1ULL / 2;
  12. return u.f;
  13. }
  14. #if __LDBL_MANT_DIG__ == 53 && __LDBL_MAX_EXP__ == 1024
  15. long double fabsl(long double x)
  16. {
  17. return fabs(x);
  18. }
  19. #elif (__LDBL_MANT_DIG__ == 64 || __LDBL_MANT_DIG__ == 113) && __LDBL_MAX_EXP__ == 16384
  20. long double fabsl(long double x)
  21. {
  22. union ldshape u = {x};
  23. u.i.se &= 0x7fff;
  24. return u.f;
  25. }
  26. #endif