Hi,

[since I am not subscribed to sage-devel, please keep me in cc]

the concept of real literals, which was intended (as far as I understand)
to keep exactly track of inputs like "1e-20", leads to the following:

sage: a=RealField(53)(1e-20)
sage: Reals(200)(a)
1.0000000000000000000000000000000000000000000000000000000000e-20
sage: Reals(200)(a.exact_rational())
9.9999999999999994515327145420957165172950370278739244710772e-21

I consider this to be a bug.

In the C language, when one writes "double a = 1e-20; printf ("%.20e\n", a);",
everybody who is fluent with IEEE-754 2008 knows that 10^-20 is not exactly
representable in the binary64 format, thus nobody is surprised to see the
output 9.99999999999999945153e-21.

Moreover real literals seem to be created only with 53-bit precision:

sage: Reals(200)(RealField(52)(1e-20))
1.0000000000000000956165483594623726717277804672348392078969e-20
sage: Reals(200)(RealField(53)(1e-20))
1.0000000000000000000000000000000000000000000000000000000000e-20
sage: Reals(200)(RealField(54)(1e-20))
1.0000000000000000203849099068359721617286420850111158275023e-20

What about getting rid of real literals?

Paul



-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-devel+unsubscr...@googlegroups.com.
To post to this group, send email to sage-devel@googlegroups.com.
Visit this group at http://groups.google.com/group/sage-devel.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to