3 views

Skip to first unread message

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?

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, 2007, 4:19:17 PM7/26/07

to

Explicitly converting it to `int` works for me. (Without the 3-digit-

block notation, of course.)

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!

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

> 18,446,744,073,709,551,616

>

> I'm lazy... I don't want to convert it manually :)

print 2**64

Jul 26, 2007, 4:49:34 PM7/26/07

to

Paul Rubin wrote:

> print 2**64

> 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, 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 :)

> 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, 2007, 4:29:39 PM7/26/07

to Stargaming, pytho...@python.org

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

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

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

Reply all

Reply to author

Forward

0 new messages

Search

Clear search

Close search

Google apps

Main menu