Copyright 2001-2003, 2005, 2013, 2018 Free Software Foundation, Inc.
This file is part of the GNU MP Library test suite.
The GNU MP Library test suite is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
The GNU MP Library test suite is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
the GNU MP Library test suite. If not, see https://www.gnu.org/licenses/. */
for (i = 0; i < COUNT; i++)
{ /* Use volatile, to avoid extended precision in floating point
registers, e.g., on m68k and 80387. */ volatiledouble d, f; unsignedlong m; int e, c;
mini_rrandomb (x, CHAR_BIT * sizeof (unsignedlong));
m = mpz_get_ui (x);
mini_urandomb (x, 8);
e = mpz_get_ui (x) - 128;
d = ldexp ((double) m, e);
mpq_set_d (y, d);
f = mpq_get_d (y); if (f != d)
{
fprintf (stderr, "mpq_set_d/mpq_get_d failed:\n"); goto dumperror;
}
d = - d;
mpq_neg (y, y);
mpq_set_d (z, d);
f = mpq_get_d (z); if (f != d || !mpq_equal (y, z))
{
fprintf (stderr, "mpq_set_d/mpq_get_d failed:\n");
dumperror:
dump ("ny", mpq_numref (y));
dump ("dy", mpq_denref (y));
fprintf (stderr, "m = %lx, e = %i\n", m, e);
fprintf (stderr, "d = %.35g\n", d);
fprintf (stderr, "f = %.35g\n", f);
fprintf (stderr, "f - d = %.35g\n", f - d);
abort ();
}
mini_rrandomb (x, CHAR_BIT * sizeof (unsignedlong));
m = mpz_get_ui (x);
mini_urandomb (x, 8);
e = mpz_get_ui (x) - 128;
d = ldexp ((double) m, e);
mpq_set_d (y, d);
if (i == 0)
mpq_neg (z, y);
mpq_add (y, y, z);
mpq_set_d (z, mpq_get_d (y));
f = mpq_get_d (z);
c = mpq_cmp (y, z);
#ifdefined(HAVE_EXACT_P) if (mpq_get_d_exact_p (y) ? c != 0 : (f > 0 ? c <= 0 : c >= 0)) #else if (f > 0 ? c < 0 : c > 0) #endif
{
fprintf (stderr, "mpq_get_d/mpq_set_d failed: %i %i\n", i, c); goto dumperror;
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.