By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
440,727 Members | 768 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 440,727 IT Pros & Developers. It's quick & easy.

question about math module notation

P: n/a
How does one make the math module spit out actual values without using
engineer or scientific notation?

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 :)
Jul 26 '07 #1
Share this Question
Share on Google+
8 Replies


P: n/a
On Thu, 26 Jul 2007 15:54:11 -0400, brad wrote:
How does one make the math module spit out actual values without using
engineer or scientific notation?

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.)
Jul 26 '07 #2

P: n/a
Stargaming wrote:
Explicitly converting it to `int` works for me. (Without the 3-digit-
block notation, of course.)
Thank you!
Jul 26 '07 #3

P: n/a
brad <by*******@gmail.comwrites:
18,446,744,073,709,551,616

I'm lazy... I don't want to convert it manually :)
print 2**64
Jul 26 '07 #4

P: n/a
Paul Rubin wrote:
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 :)
Jul 26 '07 #5

P: n/a
brad <by*******@gmail.comwrites:
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.
Jul 26 '07 #6

P: n/a
Stargaming wrote:
On Thu, 26 Jul 2007 15:54:11 -0400, brad wrote:

>How does one make the math module spit out actual values without using
engineer or scientific notation?

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.)
It's got nothing to do with the math module. Any floating point number,
whether produced by the math module or not, can be converted to a
printable representation using the % operator with a format string:
>>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


Jul 26 '07 #7

P: n/a
On Jul 26, 3:59 pm, Paul Rubin <http://phr...@NOSPAM.invalidwrote:
brad <byte8b...@gmail.comwrites:
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.
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

Jul 27 '07 #8

P: n/a
Dan Bishop <da*****@yahoo.comwrites:
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.

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
Jul 27 '07 #9

This discussion thread is closed

Replies have been disabled for this discussion.