------- Comment #7 from kargl at gcc dot gnu dot org 2007-11-22 19:00 ------- (In reply to comment #6) > Created an attachment (id=14609) --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=14609&action=view) [edit] > Patch (reverted Rev 117584) plus test case > > Initial implementation by reverting Rev. 117584 as suggested by Steve. > > Problems: > - nearest(x,-1) for negative denormal x does not give a smaller number > - returned values are not the smallest possible: > 4.9406564584124654E-324 vs. 1.11253692925360069E-308 > 1.4012985E-45 vs. 5.87747175E-39
To fix this problem, I believe that you need to set emin to emin - prec + 1 Something like + mpfr_set_emin ((mp_exp_t) (gfc_real_kinds[sgn].min_exponent - gfc_real_kinds[sgn].digit + 1)); It might be a -1. IIRC, mpfr always stores a normalized significand, so you need to play with emin to properly account for gradual underflow. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34192