https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70235
--- Comment #13 from Dominique d'Humieres <dominiq at lps dot ens.fr> --- Created attachment 38084 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=38084&action=edit A new patch for testing With y = 1.0 and d=8 I now get -8pf18.8 y= 0.00000001 -7pf18.8 y= 0.00000010 -6pf18.8 y= 0.00000100 -5pf18.8 y= 0.00001000 -4pf18.8 y= 0.00010000 -3pf18.8 y= 0.00100000 -2pf18.8 y= 0.01000000 -1pf18.8 y= 0.10000000 0pf18.8 y= 1.00000000 1pf18.8 y= 10.00000000 2pf18.8 y= 100.00000000 3pf18.8 y= 1000.00000000 4pf18.8 y= 10000.00000000 5pf18.8 y= 100000.00000000 6pf18.8 y= 1000000.00000000 7pf18.8 y= 10000000.00000000 Note that without the addition @@ -70,6 +70,10 @@ determine_precision (st_parameter_dt * d switch (f->format) { case FMT_F: + precision += dtp->u.p.scale_factor; + if (precision < f->u.real.d) + precision = f->u.real.d; + break; case FMT_G: precision += dtp->u.p.scale_factor; break; I get -8pf18.8 y= 0.00000000 -7pf18.8 y= 0.00000000 -6pf18.8 y= 0.00000000 -5pf18.8 y= 0.00000000 -4pf18.8 y= 0.00010000 -3pf18.8 y= 0.00100000 -2pf18.8 y= 0.01000000 -1pf18.8 y= 0.10000000 0pf18.8 y= 1.00000000 1pf18.8 y= 10.00000000 2pf18.8 y= 100.00000000 3pf18.8 y= 1000.00000000 4pf18.8 y= 10000.00000000 5pf18.8 y= 100000.00000000 6pf18.8 y= 1000000.00000000 7pf18.8 y= 10000000.00000000