bugGNU Octave - Bugs: bug #61844, Incorrect number of digits printed...

 
 

bug #61844: Incorrect number of digits printed by printf for "%20.15g" and "%20.17g"

Submitter:  None
Submitted:  Mon 17 Jan 2022 06:13:23 PM UTC
   
 
Category:  Octave Function Severity:  3 - Normal
Priority:  5 - Normal Item Group:  Inaccurate Result
Status:  Invalid / Not an Octave Bug Assigned to:  None
Originator Name:  János Maros Originator Email:  -email is unavailable-
Open/Closed:  * Closed Release:  * 6.1.0
Operating System:  * Microsoft Windows Fixed Release:  None
Planned Release:  None
* Mandatory Fields

Add a New Comment Rich Markup
   

Mon 17 Jan 2022 11:59:30 PM UTC, comment #3: 

comment #1:

> That looks correct to me. Why do you think this is wrong?
>

 This is not a bug indeed. I failed to recognize the insignificant zero values, sorry about that!

János Maros <jmaros>
Mon 17 Jan 2022 09:08:10 PM UTC, comment #2: 

same output for a plain C-program (ubuntu 21.10, gcc 11.2)


#include <stdio.h>
int main(int nargc, char * argv[])
{
 double val = 100/((double) 31);
 fprintf(stdout, "%20.02g\n",val);
 fprintf(stdout, "%20.03g\n",val);
 fprintf(stdout, "%20.04g\n",val);
 fprintf(stdout, "%20.05g\n",val);
 fprintf(stdout, "%20.06g\n",val);
 fprintf(stdout, "%20.07g\n",val);
 fprintf(stdout, "%20.08g\n",val);
 fprintf(stdout, "%20.09g\n",val);
 fprintf(stdout, "%20.10g\n",val);
 fprintf(stdout, "%20.11g\n",val);
 fprintf(stdout, "%20.12g\n",val);
 fprintf(stdout, "%20.13g\n",val);
 fprintf(stdout, "%20.14g\n",val);
 fprintf(stdout, "%20.15g\n",val);
 fprintf(stdout, "%20.16g\n",val);
 fprintf(stdout, "%20.17g\n",val);
 fprintf(stdout, "%20.18g\n",val);
 fprintf(stdout, "%20.19g\n",val);
 fprintf(stdout, "%20.20g\n",val);
 fprintf(stdout, "%20.21g\n",val);

 fprintf(stdout, "%17.00g\n",val);
 fprintf(stdout, "%17.01g\n",val);
 fprintf(stdout, "%17.02g\n",val);
 fprintf(stdout, "%17.03g\n",val);
 fprintf(stdout, "%17.04g\n",val);
 fprintf(stdout, "%17.05g\n",val);
 fprintf(stdout, "%17.06g\n",val);
 fprintf(stdout, "%17.07g\n",val);
 fprintf(stdout, "%17.08g\n",val);
 fprintf(stdout, "%17.09g\n",val);
 fprintf(stdout, "%17.10g\n",val);
 fprintf(stdout, "%17.11g\n",val);
 fprintf(stdout, "%17.12g\n",val);
 fprintf(stdout, "%17.13g\n",val);
 fprintf(stdout, "%17.14g\n",val);
 fprintf(stdout, "%17.15g\n",val);
 fprintf(stdout, "%17.16g\n",val);
 fprintf(stdout, "%17.17g\n",val);
 fprintf(stdout, "%17.18g\n",val);
 fprintf(stdout, "%17.19g\n",val);
 fprintf(stdout, "%17.20g\n",val);
 fprintf(stdout, "%17.21g\n",val);
}


which outputs


                 3.2
                3.23
               3.226
              3.2258
             3.22581
            3.225806
           3.2258065
          3.22580645
         3.225806452
        3.2258064516
       3.22580645161
      3.225806451613
     3.2258064516129
     3.2258064516129
   3.225806451612903
   3.225806451612903
 3.22580645161290303
3.225806451612903025
3.2258064516129030253
3.22580645161290302525
                3
                3
              3.2
             3.23
            3.226
           3.2258
          3.22581
         3.225806
        3.2258065
       3.22580645
      3.225806452
     3.2258064516
    3.22580645161
   3.225806451613
  3.2258064516129
  3.2258064516129
3.225806451612903
3.225806451612903
3.22580645161290303
3.225806451612903025
3.2258064516129030253
3.22580645161290302525


A.R. Burgers <arb>
Mon 17 Jan 2022 07:30:28 PM UTC, comment #1: 

That looks correct to me. Why do you think this is wrong?

See e.g.: https://linux.die.net/man/3/sprintf

> This gives the minimum number of digits to appear for d, i, o, u, x, and X conversions, the number of digits to appear after the radix character for a, A, e, E, f, and F conversions, the maximum number of significant digits for g and G conversions, or the maximum number of characters to be printed from a string for s and S conversions.

Markus Mützel <mmuetzel>
Group administrator
Mon 17 Jan 2022 06:13:23 PM UTC, original submission:  

GNU Octave, version 6.1.0
Octave was configured for "x86_64-w64-mingw32".

>> printf("%20.00g",100/31)

                   3>> printf("%20.02g",100/31)
                 3.2>> printf("%20.03g",100/31)
                3.23>> printf("%20.04g",100/31)
               3.226>> printf("%20.05g",100/31)
              3.2258>> printf("%20.06g",100/31)
             3.22581>> printf("%20.07g",100/31)
            3.225806>> printf("%20.08g",100/31)
           3.2258065>> printf("%20.09g",100/31)
          3.22580645>> printf("%20.10g",100/31)
         3.225806452>> printf("%20.11g",100/31)
        3.2258064516>> printf("%20.12g",100/31)
       3.22580645161>> printf("%20.13g",100/31)
      3.225806451613>> printf("%20.14g",100/31)
     3.2258064516129>> printf("%20.15g",100/31)
     3.2258064516129>> printf("%20.16g",100/31)
   3.225806451612903>> printf("%20.17g",100/31)
   3.225806451612903>> printf("%20.18g",100/31)
 3.22580645161290303>> printf("%20.19g",100/31)
3.225806451612903025>> printf("%20.20g",100/31)
3.2258064516129030253>> printf("%20.21g",100/31)
3.22580645161290302525>>

>>
>> printf("%17.00g",100/31)

                3>> printf("%17.01g",100/31)
                3>> printf("%17.02g",100/31)
              3.2>> printf("%17.03g",100/31)
             3.23>> printf("%17.04g",100/31)
            3.226>> printf("%17.05g",100/31)
           3.2258>> printf("%17.06g",100/31)
          3.22581>> printf("%17.07g",100/31)
         3.225806>> printf("%17.08g",100/31)
        3.2258065>> printf("%17.09g",100/31)
       3.22580645>> printf("%17.10g",100/31)
      3.225806452>> printf("%17.11g",100/31)
     3.2258064516>> printf("%17.12g",100/31)
    3.22580645161>> printf("%17.13g",100/31)
   3.225806451613>> printf("%17.14g",100/31)
  3.2258064516129>> printf("%17.15g",100/31)
  3.2258064516129>> printf("%17.16g",100/31)
3.225806451612903>> printf("%17.17g",100/31)
3.225806451612903>> printf("%17.18g",100/31)
3.22580645161290303>> printf("%17.19g",100/31)
3.225806451612903025>> printf("%17.20g",100/31)
3.2258064516129030253>> printf("%17.21g",100/31)

Anonymous

 

(Note: upload size limit is set to 16384 kB, after insertion of the required escape characters.)

Attach Files:
   
   
Comment:
   

No files currently attached

 

Depends on the following items: None found

Items that depend on this one: None found

 

Carbon-Copy List
  • -email is unavailable- added by rik5 (Updated the item)
  • -email is unavailable- added by jmaros (Posted a comment)
  • -email is unavailable- added by arb (Posted a comment)
  • -email is unavailable- added by mmuetzel (Posted a comment)
  • -email is unavailable- added by None (Submitted the item)
  •  

    There are 0 votes so far. Votes easily highlight which items people would like to see resolved in priority, independently of the priority of the item set by tracker managers.

    Only group members can vote.

     

    Follow 2 latest changes.

    Date Changed by Updated Field Previous Value => Replaced by
    2022-01-18 rik5 StatusNone Invalid / Not an Octave Bug
        Open/ClosedOpen Closed

    Back to the top

    Powered by Savane 3.13-4b48.
    Corresponding source code