Re: print() does output numbers in scientific notation violating JSON number spec

[email protected] Thu, 18 Jan 2024 23:48:07 +0100
Newsgroups gmane.comp.mathematics.pari.devel
Message-ID <[email protected]>
On 2024-01-18 23:09, [email protected] wrote:
> 
> Is there an option to make PARI/GP produce "0.00001" as output instead
> of scientific representation?
> 
I found workaround:

? print(0.00001)
1.0000000000000000000000000000000000000 E-5
? print(strprintf("%f",0.00001))
0.000010000000000000000000000000000000000000
?

I cannot use printf() since the float is arg of wlog() function:

     jscad.wlog=(args[..])->{
         my(nargs=#args);
         if(nargs>0,filewrite1(writer,args[1]);
             foreach(args[2..nargs],arg,
                 filewrite1(writer," ");filewrite1(writer,arg)
             )
         );
         filewrite(writer,"");
     };

So I now use

         wlog("eps =", strprintf("%f",eps));


and get output that can be read from JavaScript/nodejs.


> I would say this is at least an interoperability bug.
> It should be fixed, if there is not a really good reason to output that 
> space.
> 
The issue is discussed in "3.4.12 format" of 2.15.4 GP user guide.
"In style g, nonzero real numbers are printed in f format, except when 
their decimal exponent
is < −4, in which case they are printed in e format."

"If the conversion style is e, real numbers are printed in scientific 
format, always with an
explicit exponent, e.g. 3.3 E-5." shows the incorrect space in doc as 
well.


For interoperability, f format output should be fixed to not show space 
between frac and exp parts.


Regards,

Hermann.