nantst.c 865 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #include <stdio.h>
  2. long double inf = 1.0f/0.0f;
  3. long double nnn = 1.0f/0.0f - 1.0f/0.0f;
  4. long double fin = 1.0f;
  5. long double neg = -1.0f;
  6. long double nn2;
  7. int isnanl(), isfinitel(), signbitl();
  8. void abort (void);
  9. void exit (int);
  10. void pvalue (char *str, long double x)
  11. {
  12. union
  13. {
  14. long double f;
  15. unsigned int i[3];
  16. }u;
  17. int k;
  18. printf("%s ", str);
  19. u.f = x;
  20. for (k = 0; k < 3; k++)
  21. printf("%08x ", u.i[k]);
  22. printf ("\n");
  23. }
  24. int
  25. main()
  26. {
  27. if (!isnanl(nnn))
  28. abort();
  29. pvalue("nnn", nnn);
  30. pvalue("inf", inf);
  31. nn2 = inf - inf;
  32. pvalue("inf - inf", nn2);
  33. if (isnanl(fin))
  34. abort();
  35. if (isnanl(inf))
  36. abort();
  37. if (!isfinitel(fin))
  38. abort();
  39. if (isfinitel(nnn))
  40. abort();
  41. if (isfinitel(inf))
  42. abort();
  43. if (!signbitl(neg))
  44. abort();
  45. if (signbitl(fin))
  46. abort();
  47. if (signbitl(inf))
  48. abort();
  49. /*
  50. if (signbitf(nnn))
  51. abort();
  52. */
  53. exit (0);
  54. return 0;
  55. }