rint.c 697 B

1234567891011121314151617181920212223242526272829303132
  1. #include <math.h>
  2. #include <stdlib.h>
  3. #include <stdint.h>
  4. #include <stdio.h>
  5. #define check_d1(func, param, expected) \
  6. do { \
  7. int err; hex_union ur; hex_union up; \
  8. up.f = param; ur.f = result = func(param); \
  9. errors += (err = (result != expected)); \
  10. err \
  11. ? printf("FAIL: %s(%g/"HEXFMT")=%g/"HEXFMT" (expected %g)\n", \
  12. #func, (param), (long long)up.hex, result, (long long)ur.hex, expected) \
  13. : printf("PASS: %s(%g)=%g\n", #func, (param), result); \
  14. } while (0)
  15. #define HEXFMT "%08llx"
  16. typedef union {
  17. double f;
  18. uint64_t hex;
  19. } hex_union;
  20. double result;
  21. int errors = 0;
  22. int main(void)
  23. {
  24. check_d1(rint, 0.6, 1.0);
  25. printf("Errors: %d\n", errors);
  26. return errors;
  27. }