[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