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...
David

On Mon, Oct 25, 2010 at 12:13, John Cremona <john.crem...@gmail.com> wrote:

> When you do sqrt(2^m) when m is odd, say m=2*k+1, the returned value
> is symbolically 2*k * sqrt(2):
>
> sage: sqrt(2^101)
> 1125899906842624*sqrt(2)
>
> Now using Integer() to "round" that will evaluate sqrt(2)
> approximately to standard precision, which is not enough.  Instead,
> use the isqrt() method for Integers:
>
> sage: a = 2^94533
> sage: b = a.isqrt()
> sage: a > b^2
> True
> sage: (b+1)^2 > a
> True
>
> John
>
> On Mon, Oct 25, 2010 at 4:50 PM, Francois Maltey <fmal...@nerim.fr> wrote:
> > Georg wrote :
> >>
> >> while calculating the integer part of square roots I realized that
> >> sqrt() returns wrong results for large inputs (although the sqrt()
> >> command itself accepts "bignum" values).
> >> example: int(sqrt(2^94533))
> >>
> >
> > int isn't a "mathematical" Sage type, but  Integer is a Sage type.
> > And Integer (sqrt(2^1234567)) fails
> >
> > But floor over Integer seems fine :
> >
> > n=10001 ; res=floor(sqrt(2^n)) ; sign(res^2-2^n) ; sign((res+1)^2-2^n)
> > I get -1 and 1.
> >
> > but it fails around n=30000 or 40000.
> >
> > You may also get a precise numerical approximation by the method
> > _____.n(digits=....).
> > By example : sqrt(2).n(digits=10000). But in this case you must compute
> "by
> > pen" the digit value.
> >
> > A very similar exercice : Is the number of digits of 123^456^789 even or
> odd
> > ?
> > Of course you must read 123^(456^789), not (123^456)^789 !
> >
> > I hope this help you...
> >
> > F. (in France)
> >
> > --
> > 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<sage-devel%2bunsubscr...@googlegroups.com>
> > For more options, visit this group at
> > http://groups.google.com/group/sage-devel
> > URL: http://www.sagemath.org
> >
>
> --
> 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<sage-devel%2bunsubscr...@googlegroups.com>
> For more options, visit this group at
> http://groups.google.com/group/sage-devel
> URL: http://www.sagemath.org
>

-- 
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