Thanks much, that helps and I am pretty sure I understand what is going on!
On Monday, March 24, 2014 10:49:18 AM UTC-4, Peter Bruin wrote:
Hello,
I am working on a Z80 project and I needed 72 bits of precision for 64
elements of the form log2(1+2^-i) (so log2(3/2), log2(5/4),...). I
needed to convert these to hexadecimal, and it worked until I tried
the following for i=56:
int(256*log(1+2^-56,2))
This returns 1, when in fact it should be 0. Actually, instead of
multiplying by 256, multiplying by 65536, or 600, or many other
numbers would also return the integer part as 1.
As a note, I used RealField(80) as my precision.
Typing log(1 + 2^-56, 2) gives the result as a symbolic expression, not
as an element of a real field. Applying int() to this internally uses a
RealIntervalField with 53 bits of precision, which is not enough in this
case. Here is a way to get the desired precision:
sage: x = RealField(80)(256*log(1+2^-56,2))
sage: x
5.1254824061038682620123e-15
sage: int(x)
0
Peter
--
You received this message because you are subscribed to the Google Groups
sage-support group.
To unsubscribe from this group and stop receiving emails from it, send an email
to sage-support+unsubscr...@googlegroups.com.
To post to this group, send email to sage-support@googlegroups.com.
Visit this group at http://groups.google.com/group/sage-support.
For more options, visit https://groups.google.com/d/optout.