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.

Reply via email to