t-cmp_d.c
上传用户:qaz666999
上传日期:2022-08-06
资源大小:2570k
文件大小:2k
源码类别:

数学计算

开发平台:

Unix_Linux

  1. /* Test mpf_cmp_d.
  2. Copyright 2001, 2003, 2003, 2005 Free Software Foundation, Inc.
  3. This file is part of the GNU MP Library.
  4. The GNU MP Library is free software; you can redistribute it and/or modify
  5. it under the terms of the GNU Lesser General Public License as published by
  6. the Free Software Foundation; either version 3 of the License, or (at your
  7. option) any later version.
  8. The GNU MP Library is distributed in the hope that it will be useful, but
  9. WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  10. or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
  11. License for more details.
  12. You should have received a copy of the GNU Lesser General Public License
  13. along with the GNU MP Library.  If not, see http://www.gnu.org/licenses/.  */
  14. #include <stdio.h>
  15. #include <stdlib.h>
  16. #include <string.h>
  17. #include "gmp.h"
  18. #include "gmp-impl.h"
  19. #include "tests.h"
  20. #define SGN(n)  ((n) > 0 ? 1 : (n) < 0 ? -1 : 0)
  21. void
  22. check_one (const char *name, mpf_srcptr x, double y, int cmp)
  23. {
  24.   int   got;
  25.   got = mpf_cmp_d (x, y);
  26.   if (SGN(got) != cmp)
  27.     {
  28.       int i;
  29.       printf    ("mpf_cmp_d wrong (from %s)n", name);
  30.       printf    ("  got  %dn", got);
  31.       printf    ("  want %dn", cmp);
  32.       mpf_trace ("  x", x);
  33.       printf    ("  y %gn", y);
  34.       mp_trace_base=-16;
  35.       mpf_trace ("  x", x);
  36.       printf    ("  y %gn", y);
  37.       printf    ("  y");
  38.       for (i = 0; i < sizeof(y); i++)
  39.         printf (" %02X", (unsigned) ((unsigned char *) &y)[i]);
  40.       printf ("n");
  41.       abort ();
  42.     }
  43. }
  44. void
  45. check_infinity (void)
  46. {
  47.   mpf_t   x;
  48.   double  y = tests_infinity_d ();
  49.   if (y == 0.0)
  50.     return;
  51.   mpf_init (x);
  52.   /* 0 cmp inf */
  53.   mpf_set_ui (x, 0L);
  54.   check_one ("check_infinity", x,  y, -1);
  55.   check_one ("check_infinity", x, -y,  1);
  56.   /* 123 cmp inf */
  57.   mpf_set_ui (x, 123L);
  58.   check_one ("check_infinity", x,  y, -1);
  59.   check_one ("check_infinity", x, -y,  1);
  60.   /* -123 cmp inf */
  61.   mpf_set_si (x, -123L);
  62.   check_one ("check_infinity", x,  y, -1);
  63.   check_one ("check_infinity", x, -y,  1);
  64.   /* 2^5000 cmp inf */
  65.   mpf_set_ui (x, 1L);
  66.   mpf_mul_2exp (x, x, 5000L);
  67.   check_one ("check_infinity", x,  y, -1);
  68.   check_one ("check_infinity", x, -y,  1);
  69.   /* -2^5000 cmp inf */
  70.   mpf_neg (x, x);
  71.   check_one ("check_infinity", x,  y, -1);
  72.   check_one ("check_infinity", x, -y,  1);
  73.   mpf_clear (x);
  74. }
  75. int
  76. main (int argc, char *argv[])
  77. {
  78.   tests_start ();
  79.   check_infinity ();
  80.   tests_end ();
  81.   exit (0);
  82. }