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