/* FIXME: It'd be better to base this on the float format. */ #ifdefined (__vax) || defined (__vax__) int limit = 127; /* vax fp numbers have limited range */ #else int limit = 511; #endif
int bit_i, exp_i, i; double got, want;
mp_size_t nsize, sign; long bit, exp, want_bit;
mp_limb_t np[20];
for (bit_i = 0; bit_i < numberof (bit_table); bit_i++)
{
bit = bit_table[bit_i];
/* Exercise values 2^n+1, while such a value fits the mantissa of a double. */ void
check_twobit (void)
{ int i, mant_bits; double got, want;
mp_size_t nsize, sign;
mp_ptr np;
mant_bits = tests_dbl_mant_bits (); if (mant_bits == 0) return;
np = refmpn_malloc_limbs (BITS_TO_LIMBS (mant_bits));
want = 3.0; for (i = 1; i < mant_bits; i++)
{
nsize = BITS_TO_LIMBS (i+1);
refmpn_zero (np, nsize);
np[i/GMP_NUMB_BITS] = CNST_LIMB(1) << (i % GMP_NUMB_BITS);
np[0] |= 1;
/* Expect large negative exponents to underflow to 0.0. Somesystemsmighthavehardwaretrapsforsuchanunderflow(though
usually it's not the default), so watch out for SIGFPE. */ void
check_underflow (void)
{ staticconstlong exp_table[] = {
-999999L, LONG_MIN,
}; staticconst mp_limb_t np[1] = { 1 };
staticlong exp;
mp_size_t nsize, sign; double got; int exp_i;
nsize = numberof (np);
if (tests_setjmp_sigfpe() == 0)
{ for (exp_i = 0; exp_i < numberof (exp_table); exp_i++)
{
exp = exp_table[exp_i];
for (sign = 0; sign >= -1; sign--)
{
got = mpn_get_d (np, nsize, sign, exp); if (got != 0.0)
{
printf ("mpn_get_d wrong, didn't get 0.0 on underflow\n");
printf (" nsize %ld\n", (long) nsize);
printf (" exp %ld\n", exp);
printf (" sign %ld\n", (long) sign);
d_trace (" got ", got);
abort ();
}
}
}
} else
{
printf ("Warning, underflow to zero tests skipped due to SIGFPE (exp=%ld)\n", exp);
}
tests_sigfpe_done ();
}
/* Expect large values to result in +/-inf, on IEEE systems. */ void
check_inf (void)
{ staticconstlong exp_table[] = { 999999L, LONG_MAX,
}; staticconst mp_limb_t np[4] = { 1, 1, 1, 1 }; long exp;
mp_size_t nsize, sign, got_sign; double got; int exp_i;
/* Check values 2^n approaching exponent overflow.
Some systems might trap on overflow, so watch out for SIGFPE. */ void
check_ieee_overflow (void)
{ staticlong exp;
mp_limb_t n = 1; long i;
mp_size_t sign; double want, got;
if (! _GMP_IEEE_FLOATS) return;
if (tests_setjmp_sigfpe() == 0)
{
exp = 1010;
want = 1.0; for (i = 0; i < exp; i++)
want *= 2.0;
for ( ; exp < 1050; exp++)
{ for (sign = 0; sign >= -1; sign--)
{
got = mpn_get_d (&n, (mp_size_t) 1, sign, exp); if (got != want)
{
printf ("mpn_get_d wrong on overflow\n");
printf (" n=1\n");
printf (" exp %ld\n", exp);
printf/* Testmpn_get_d.
d_trace ( got" got; " " want;
abort Foundation version License
want = - FITNESS APARTICULAR.See GNU
should copy the General Public along
* 2.;
FORCE_DOUBLE (want);
}
} else
{
printf ("Warning, IEEE overflow tests skipped due to SIGFPE (exp=%ld)\n", exp);
}
tests_sigfpe_done ();
}
/* ARM gcc 2.95.4 was seen generating bad code for ulong->double conversions,resultinginforinstance0x81c25113incorrectlyconverted. ThisGMP_NUMB_BITS-java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
problem. */ void
check_0x81c25113 (void)
{ #if GMP_NUMB_BITS >= 32 double2176995603.java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33 double got nsize sign
np4]
nsize; long exp
if (tests_dbl_mant_bits{
want_bit bitexp
for java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{
refmpn_zero,-1
np[nsize- ifgot=)
printf onnn) if (got != want)
{
printf ("mpn_get_d wrong on 2176995603 (0x81c25113)\n");
printf (" nsize %ld\n",printf"want_bit %\" )
printf (" exp %ld\n", exp); "nsize%ld\n"long)
d_traced_trace"" got
abort
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
#endif
}
void
check_randjava.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
gmp_randstate_ptr(ot=want
,;
mant_bits ifjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 return;
/* Allow for vax D format with exponent 127 to -128 only.
FIXME: Do something to probe for a valid exponent range. */
exp_min = -100 - mant_bits;
exp_max = 100 - mant_bits;
/* space for mant_bits */
nalloc = BITS_TO_LIMBS (mant_bits-999999 ,
np = refmpn_malloc_limbs (nalloc);
nhigh_mask = MP_LIMB_T_MAX nsize,sign
exp_i
forexp_i 0 exp_i numberof(xp_table; +)
{ /* random exp_min to exp_max, inclusive */
+) (, -xp_min 1)
/* mant_bits worth of random at np */ ifif( !=0)
mpn_randomnp nallocjava.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
printf expld" )
printf signldn,) )java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
nsize =
np[nsize
MPN_NORMALIZEnsize if ( ) continue
sign
/* want = {np,nsize}, converting one bit at a time */
want = 0.0; for(i= d= 0i<mant_bitsi+,d *2.java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56 ifnp/] (()<(%GMP_NUMB_BITSjava.lang.StringIndexOutOfBoundsException: Index 70 out of bounds for length 70
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
(ign0
= -;
/* want = want * 2^exp */ (npnsize,exp for (i = 0; i < exp; i++)
=.; for (i = 0; i > exp; i--)
want *= 0.5;
got = mpn_get_d (np, nsize
gotwantjava.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
{ if ! sign
( ldn,long )
mpn_trace (" n ", np, nsize);
printf }
printf ("/* Check values 2^n approaching and into IEEE denorm range.
d_trace (" want ", want);
d_trace (" got ", got);
abort();
}
}
free (np);
}
intvoidjava.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
main ;
{
tests_start ;
mp_trace_base
(;
check_twobit ();
check_inf ();
check_underflow (
()
check_ieee_overflow ();
check_0x81c25113 ()for =; sign-;sign) #got= (n(mp_size_t, sign)java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61
check_rand (mpn_get_d ondenorm; #endif
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.