Beispiel #1
0
static void
teq (mpfr_t x)
{
  mpfr_t y;
  unsigned long k, px, mx;

  mpfr_init2 (y, MPFR_PREC(x));

  mx = (MPFR_PREC(x) - 1) / mp_bits_per_limb;
  px = mp_bits_per_limb - 2;

  for (k = 2; k < MPFR_PREC(x); k++)
    {
      mpfr_set (y, x, MPFR_RNDN);

      MPFR_MANT(y) [mx] ^= (mp_limb_t) 1 << px;

      if (mpfr_eq(y, x, k) || !mpfr_eq(y, x, k - 1))
        {
          printf ("Error in eq.\n");
          printf ("x = "); mpfr_print_binary (x); printf ("\n");
          printf ("y = "); mpfr_print_binary (y); printf ("\n");
          printf ("k = %lu\n", k);
          printf ("mpfr_eq(y, x, k) = %d\nmpfr_eq(y, x, k - 1) = %d\n",
                  mpfr_eq (y, x, k), mpfr_eq (y, x, k - 1));
          exit (1);
        }

      if (px)
        {
          --px;
        }
      else
        {
          --mx;
          px = mp_bits_per_limb - 1;
        }
    }
  mpfr_clear (y);
}
Beispiel #2
0
int
main (void)
{
  int j, k;
  mpfr_t x, y, z, t, y2, z2, t2;

  tests_start_mpfr ();

  mpfr_inits2 (SIZEX, x, y, z, t, y2, z2, t2, (mpfr_ptr) 0);

  mpfr_set_str1 (x, "0.5");
  mpfr_ceil(y, x);
  if (mpfr_cmp_ui (y, 1))
    {
      printf ("Error in mpfr_ceil for x=0.5: expected 1.0, got ");
      mpfr_print_binary(y);
      putchar('\n');
      exit (1);
    }

  mpfr_set_ui (x, 0, MPFR_RNDN);
  mpfr_ceil(y, x);
  if (mpfr_cmp_ui(y,0))
    {
      printf ("Error in mpfr_ceil for x=0.0: expected 0.0, got ");
      mpfr_print_binary(y);
      putchar('\n');
      exit (1);
    }

  mpfr_set_ui (x, 1, MPFR_RNDN);
  mpfr_ceil(y, x);
  if (mpfr_cmp_ui(y,1))
    {
      printf ("Error in mpfr_ceil for x=1.0: expected 1.0, got ");
      mpfr_print_binary(y);
      putchar('\n');
      exit (1);
    }

  for (j=0;j<1000;j++)
    {
      mpfr_urandomb (x, RANDS);
      MPFR_EXP (x) = 2;

      for (k = 2; k <= SIZEX; k++)
        {
          mpfr_set_prec(y, k);
          mpfr_set_prec(y2, k);
          mpfr_set_prec(z, k);
          mpfr_set_prec(z2, k);
          mpfr_set_prec(t, k);
          mpfr_set_prec(t2, k);

          mpfr_floor(y, x);
          mpfr_set(y2, x, MPFR_RNDD);

          mpfr_trunc(z, x);
          mpfr_set(z2, x, MPFR_RNDZ);

          mpfr_ceil(t, x);
          mpfr_set(t2, x, MPFR_RNDU);

          if (!mpfr_eq(y, y2, k))
            {
              printf("Error in floor, x = "); mpfr_print_binary(x);
              printf("\n");
              printf("floor(x) = "); mpfr_print_binary(y);
              printf("\n");
              printf("round(x, RNDD) = "); mpfr_print_binary(y2);
              printf("\n");
              exit(1);
            }

          if (!mpfr_eq(z, z2, k))
            {
              printf("Error in trunc, x = "); mpfr_print_binary(x);
              printf("\n");
              printf("trunc(x) = "); mpfr_print_binary(z);
              printf("\n");
              printf("round(x, RNDZ) = "); mpfr_print_binary(z2);
              printf("\n");
              exit(1);
            }

          if (!mpfr_eq(y, y2, k))
            {
              printf("Error in ceil, x = "); mpfr_print_binary(x);
              printf("\n");
              printf("ceil(x) = "); mpfr_print_binary(t);
              printf("\n");
              printf("round(x, RNDU) = "); mpfr_print_binary(t2);
              printf("\n");
              exit(1);
            }
          MPFR_EXP(x)++;
        }
    }

  mpfr_clears (x, y, z, t, y2, z2, t2, (mpfr_ptr) 0);

  tests_end_mpfr ();
  return 0;
}
Beispiel #3
0
static void
special (void)
{
  mpfr_t x, y, z;
  int i, error = 0;

  mpfr_init2 (x, 53);
  mpfr_init2 (y, 53);
  mpfr_init2 (z, 53);

  mpfr_set_str (x, "1", 10, (mpfr_rnd_t) 0);
  mpfr_set_str (y, "1e-10000", 10, (mpfr_rnd_t) 0);
  mpfr_add (z, x, y, MPFR_RNDU);

  for (i = 1; i <= 52; i++)
    if (mpfr_eq (x, z, i) == 0)
      error = 1;
  for (i = 53; i <= 100; i++)
    if (mpfr_eq (x, z, i) != 0)
      error = 1;
  if (mpfr_eq (x, z, 1000) != 0)
    error = 1;

  if (error)
    {
      printf ("Error in mpfr_eq (1, 1+1e-1000)\n");
      exit (1);
    }

  mpfr_set_nan (x);
  mpfr_set_nan (y);
  MPFR_ASSERTN(mpfr_eq (x, y, 1) == 0);

  mpfr_set_inf (y, 1);
  MPFR_ASSERTN(mpfr_eq (x, y, 1) == 0);

  mpfr_set_ui (y, 0, MPFR_RNDN);
  MPFR_ASSERTN(mpfr_eq (x, y, 1) == 0);

  mpfr_set_inf (x, 1);
  mpfr_set_inf (y, 1);
  MPFR_ASSERTN(mpfr_eq (x, y, 1));

  mpfr_set_inf (x, 1);
  mpfr_set_inf (y, -1);
  MPFR_ASSERTN(mpfr_eq (x, y, 1) == 0);

  mpfr_set_inf (x, -1);
  mpfr_set_inf (y, -1);
  MPFR_ASSERTN(mpfr_eq (x, y, 1));

  mpfr_set_inf (x, 1);
  mpfr_set_ui (y, 0, MPFR_RNDN);
  MPFR_ASSERTN(mpfr_eq (x, y, 1) == 0);

  mpfr_set_ui (x, 1, MPFR_RNDN);
  mpfr_set_ui (y, 0, MPFR_RNDN);
  MPFR_ASSERTN(mpfr_eq (x, y, 1) == 0);
  MPFR_ASSERTN(mpfr_eq (y, x, 1) == 0);

  mpfr_set_ui (x, 0, MPFR_RNDN);
  mpfr_set_ui (y, 0, MPFR_RNDN);
  MPFR_ASSERTN(mpfr_eq (x, y, 1));

  mpfr_neg (y, y, MPFR_RNDN);
  MPFR_ASSERTN(mpfr_eq (x, y, 1));

  mpfr_neg (x, x, MPFR_RNDN);
  MPFR_ASSERTN(mpfr_eq (x, y, 1));

  mpfr_set_ui (x, 1, MPFR_RNDN);
  mpfr_neg (y, x, MPFR_RNDN);
  MPFR_ASSERTN(mpfr_eq (x, y, 1) == 0);

  mpfr_set_prec (x, 2 * mp_bits_per_limb);
  mpfr_set_prec (y, mp_bits_per_limb);
  mpfr_set_ui (x, 1, MPFR_RNDN);
  mpfr_set_ui (y, 1, MPFR_RNDN);
  MPFR_ASSERTN(mpfr_eq (x, y, mp_bits_per_limb - 1));
  MPFR_ASSERTN(mpfr_eq (x, y, mp_bits_per_limb));
  MPFR_ASSERTN(mpfr_eq (x, y, mp_bits_per_limb + 1));
  MPFR_ASSERTN(mpfr_eq (x, y, 2 * mp_bits_per_limb - 1));
  MPFR_ASSERTN(mpfr_eq (x, y, 2 * mp_bits_per_limb));
  MPFR_ASSERTN(mpfr_eq (x, y, 2 * mp_bits_per_limb + 1));

  mpfr_nextabove (x);
  MPFR_ASSERTN(mpfr_eq (x, y, mp_bits_per_limb - 1));
  MPFR_ASSERTN(mpfr_eq (x, y, mp_bits_per_limb));
  MPFR_ASSERTN(mpfr_eq (x, y, mp_bits_per_limb + 1));
  MPFR_ASSERTN(mpfr_eq (x, y, 2 * mp_bits_per_limb - 1));
  MPFR_ASSERTN(mpfr_eq (x, y, 2 * mp_bits_per_limb) == 0);
  MPFR_ASSERTN(mpfr_eq (x, y, 2 * mp_bits_per_limb + 1) == 0);
  MPFR_ASSERTN(mpfr_eq (y, x, mp_bits_per_limb - 1));
  MPFR_ASSERTN(mpfr_eq (y, x, mp_bits_per_limb));
  MPFR_ASSERTN(mpfr_eq (y, x, mp_bits_per_limb + 1));
  MPFR_ASSERTN(mpfr_eq (y, x, 2 * mp_bits_per_limb - 1));
  MPFR_ASSERTN(mpfr_eq (y, x, 2 * mp_bits_per_limb) == 0);
  MPFR_ASSERTN(mpfr_eq (y, x, 2 * mp_bits_per_limb + 1) == 0);

  mpfr_set_ui (x, 1, MPFR_RNDN);
  mpfr_set_ui (y, 2, MPFR_RNDN);
  MPFR_ASSERTN(mpfr_eq (x, y, 1) == 0);

  mpfr_set_prec (x, 2 * mp_bits_per_limb);
  mpfr_set_prec (y, 2 * mp_bits_per_limb);
  mpfr_set_ui (x, 2, MPFR_RNDN);
  mpfr_set_ui (y, 3, MPFR_RNDN);
  MPFR_ASSERTN(mpfr_eq (x, y, 1));
  MPFR_ASSERTN(mpfr_eq (x, y, 2) == 0);
  MPFR_ASSERTN(mpfr_eq (x, y, mp_bits_per_limb) == 0);
  MPFR_ASSERTN(mpfr_eq (x, y, mp_bits_per_limb + 1) == 0);

  mpfr_clear (x);
  mpfr_clear (y);
  mpfr_clear (z);
}