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

Reply via email to