[pyar] En python los enteros no tienen límite, y los float?

Claudio Freire klaussfreire en gmail.com
Mar Ago 17 12:12:21 ART 2010


2010/8/16 Facundo Batista <facundobatista en gmail.com>

> 2010/8/16 Juanjo Conti <jjconti en gmail.com>:
>
> >
> > Tenemos floats de 64 bits por lo que el número más grande sería 1.8 * 10
> ^
> > 308
>
> Pero tenemos Decimal! :)
>
> Tiene (entre muchas otras que no aplican a este post) dos ventajas:
>
> - El exponente es un "python int", así que no tiene límites:
>
> >>> decimal.Decimal("1.8e308")
> Decimal('1.8E+308')
> >>> int(decimal.Decimal("1.8e308"))
>
> 180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000L
>

Ojo que decimal, aunque muy guachiguau, es... "decimal".

Float es base2, decimal base10. No es pequeña diferencia a veces. Ni en
performance, ni en temas de precisión aritmética.

Ej: pasar de float a decimal a float, por esto de la base, no es
"idempotente":

>>> import decimal
>>> tercio = decimal.Decimal(1) / decimal.Decimal(3)
>>> tercio
Decimal('0.3333333333333333333333333333')
>>> ftercio = float(tercio)
>>> ftercio
0.33333333333333331
>>> dtercio = decimal.Decimal(ftercio)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.6/decimal.py", line 652, in __new__
    "First convert the float to a string")
TypeError: Cannot convert float to Decimal.  First convert the float to a
string
>>> dtercio = decimal.Decimal(str(ftercio))
>>> dtercio
Decimal('0.333333333333')
>>> float(dtercio)
0.33333333333300003
>>>

Oops... no es lo mismo!
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20100817/7da6145c/attachment.html>


More information about the pyar mailing list