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