I get this from <code>print math.pow(2,64)</code>:
1.84467440737e+19
I want this:
18,446,744,073,709,551,616
I'm lazy... I don't want to convert it manually :)
Explicitly converting it to `int` works for me. (Without the 3-digit-
block notation, of course.)
> Explicitly converting it to `int` works for me. (Without the 3-digit-
> block notation, of course.)
Thank you!
print 2**64
Ah yes, that works too... thanks. I've settled on doing it this way:
print int(math.pow(2,64))
I like the added parenthesis :)
I was surprised to find that gives an exact (integer, not
floating-point) answer. Still, I think it's better to say 2**64
which also works for (e.g.) 2**10000 where math.pow(2,10000)
raises an exception.
>>> x = 1.84467440737e+19
>>> x
1.84467440737e+19
>>> print '%25.3f' % x
18446744073699999744.000
>>> print '%12.5e' % x
1.84467e+19
>>> print '%12.5g' % x
1.8447e+19
See http://docs.python.org/lib/typesseq-strings.html for all he details.
Gary Herron
It *is* binary floating point. Powers of 2 are exactly
representable. Of course, it doesn't give an exact answer in general.
>>> int(math.pow(10, 23))
99999999999999991611392L
Oh yikes, good point. math.pow(2,64) is really not appropriate for
what the OP wanted, I'd say. If you want integer exponentiation, then
write it that way. Don't do a floating point exponentiation that just
happens to not lose precision for the specific example.
>>> int(math.pow(3,50)) # wrong
717897987691852578422784L
>>> 3**50 # right
717897987691852588770249L