On Tue, Oct 26, 2010 at 1:03 AM, Francois Maltey <fmal...@nerim.fr> wrote:
> David Roe wrote :
>>
>> I posted a patch there that should fix it; I have to work on other stuff,
>> but if someone else wants to take over and write some doctests, make sure it
>> works in lots of cases...
>> David
>>
>> On Mon, Oct 25, 2010 at 17:14, Burcin Erocal <bur...@erocal.org
>> <mailto:bur...@erocal.org>> wrote:
>>
>>    On Mon, 25 Oct 2010 17:00:39 -0400
>>    David Roe <r...@math.harvard.edu <mailto:r...@math.harvard.edu>>
>>    wrote:
>>
>>    > This is a good workaround, but the original problem can be traced to
>>    > the function sage.symbolic.expression.Expression.__int__
>>    >
>>    > def __int__(self):
>>    >     #FIXME: can we do better?
>>    >     return int(self.n(prec=100))
>>    >
>>    > Presumably you could adaptively estimate to higher precision until
>>    > your error interval included only one integer...
>>
>>    This is #9953 on trac:
>>
>>    http://trac.sagemath.org/sage_trac/ticket/9953
>>
> I prefer
>
> return(self.n(prec=ceil(log(abs(self.n()),10)+10)))
>
> But this answer isn't right around XXXXXXXXXXXX.999999999999 or
> XXXXXXXXXXX.000000001.
>
> And I don't see where floor(10^1234*sqrt(2)) is wrong. I test :
>
> vt=floor(10^1234*sqrt(2)) ; sign(vt^2-2*10^2468) ; sgn((vt+1)^2-2*10^2468)
> # answer =-1 and 1 for sage 4.5.3

Use intervals, increasing the precision until the result lies in a
single interval. This is what floor(...) does. Of course that can be
quite slow, especially for actual integer values. A speedup (not in
floor itself) would be to test equality against an integer if the
result "looks like" it is equal after several refinements.

- Robert

-- 
To post to this group, send an email to sage-devel@googlegroups.com
To unsubscribe from this group, send an email to 
sage-devel+unsubscr...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/sage-devel
URL: http://www.sagemath.org

Reply via email to