[fortran,patch] Call mpfr_check_range after setting emin/emax
Tobias Burnus
burnus@net-b.de
Sun May 18 18:35:00 GMT 2008
FX wrote:
> The two patchlets below regtest fine on my system (x86_64-linux, both
> -m32 and -m64) and fix the issue I am seeing with
> gfortran.dg/nearest_4.f90. Is it OK to commit?
The arith.c part is OK. However, I wonder whether
>> @@ -2821,6 +2821,7 @@ gfc_simplify_nearest (gfc_expr *x, gfc_e
>> mpfr_set_emin ((mp_exp_t) gfc_real_kinds[kind].min_exponent -
>> mpfr_get_prec(result->value.real) + 1);
>> mpfr_set_emax ((mp_exp_t) gfc_real_kinds[kind].max_exponent - 1);
>> + mpfr_check_range (result->value.real, 0, GMP_RNDU);
shouldn't be rather
mpfr_set_emax ((mp_exp_t) gfc_real_kinds[kind].max_exponent - 1);
if (mpfr_sgn (s->value.real) > 0)
{
+ mpfr_check_range (result->value.real, 0, GMP_RNDU);
mpfr_nextabove (result->value.real);
mpfr_subnormalize (result->value.real, 0, GMP_RNDU);
}
else
{
+ mpfr_check_range (result->value.real, 0, GMP_RNDD);
mpfr_nextbelow (result->value.real);
mpfr_subnormalize (result->value.real, 0, GMP_RNDD);
}
But I have to admit that I have not thought much about this.
Tobias
More information about the Fortran
mailing list