Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

question about math module notation

11 views
Skip to first unread message

brad

unread,
Jul 26, 2007, 3:54:11 PM7/26/07
to
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 :)

Stargaming

unread,
Jul 26, 2007, 4:19:17 PM7/26/07
to

Explicitly converting it to `int` works for me. (Without the 3-digit-
block notation, of course.)

brad

unread,
Jul 26, 2007, 4:24:52 PM7/26/07
to
Stargaming wrote:

> Explicitly converting it to `int` works for me. (Without the 3-digit-
> block notation, of course.)

Thank you!

Paul Rubin

unread,
Jul 26, 2007, 4:28:26 PM7/26/07
to
brad <byte...@gmail.com> writes:
> 18,446,744,073,709,551,616
>
> I'm lazy... I don't want to convert it manually :)

print 2**64

brad

unread,
Jul 26, 2007, 4:49:34 PM7/26/07
to
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 :)

Paul Rubin

unread,
Jul 26, 2007, 4:59:12 PM7/26/07
to
brad <byte...@gmail.com> writes:
> 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.

Gary Herron

unread,
Jul 26, 2007, 4:29:39 PM7/26/07
to Stargaming, pytho...@python.org
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


Dan Bishop

unread,
Jul 26, 2007, 8:20:29 PM7/26/07
to
On Jul 26, 3:59 pm, Paul Rubin <http://phr...@NOSPAM.invalid> wrote:

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

Paul Rubin

unread,
Jul 26, 2007, 8:29:26 PM7/26/07
to
Dan Bishop <dan...@yahoo.com> writes:
> > 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

0 new messages