Hello all,

I am wondering how it is possible to print (in a file, in a string) new 64 bit integers,
at full accuracy. Their relative accuracy is better than for decimal numbers
(1/2^63 instead of %eps=1/2^52).

In Scilab 5, digits lower than 1/%eps -- that are somewhat randomly set --
can be displayed but are not relevant:
-->format(24)
-->%pi
 %pi  =
    3.141592653589793115998

-->(%pi-3.141592653589793)==0
 ans  =
  T

In Scilab 6, digits beyond %eps are displayed as 0. This is great:
--> format(24)
--> %pi
 %pi  =
   3.141592653589793100000

However, this change is applied to all numbers, even to integers.
The issue is that Scilab 6 also brings super-integers :) int64 / uint64
having 64-bit mantissae, instead of 53-bit mantissae for decimal numbers.
Hence, int64 have a relative accuracy better than %eps.
Unfortunately the related digits can't be printed.
Only the default display in console works.
Examples:
i = int64(2)^62 + 1
printf("%d  %i  %ld  %li \n", i, i ,i, i)
format(22)
string(i)
// I found this undocumented trick with printf format, but there is the same truncature:
printf("%20.0f\n", i)

// Results:
--> i = int64(2)^62 + 1
 i  =
  4611686018427387905        // The right value!

--> printf("%d  %i  %ld  %li \n", i, i ,i, i)
-2147483648 -2147483648 -2147483648 -2147483648 // Oups. %lld does nor work

--> format(22)
--> string(i)
 ans  =
 4611686018427387900        // bad trailing zeros

--> // I found this undocumented trick with printf format, but there is the same truncature:
--> printf("%20.0f\n", i)
 4611686018427387900        // Same issue (final 5 missing)


I started looking for a solution with write() and its fortran formating,
but it looks no more ready for int64 integers.

Would you know any solution?

Thanks
Samuel

_______________________________________________
users mailing list
users@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users

Reply via email to