[Python-es] El infinito se me queda corto
Kiko
kikocorreoso en gmail.com
Mie Mar 20 13:30:34 CET 2013
El 20 de marzo de 2013 12:37, Jose Caballero <jcaballero.hep en gmail.com>escribió:
> Imagino, sin haberlo comprobado, que será por la precisión con la que se
> define pi.
>
>
He usado un pi definido por mi con 100 decimales y el módulo decimal y sale
lo mismo (con numpy me da error si uso Decimal con una precisión muy alta
¿?, si convierto el Decimal a np.float96 me da lo mismo).
Como pruebas, he usado (sin z/cos z) en lugar de la tangente y da cosas
similares con valores muy diferentes según la precisión del decimal pero a
partir de un valor para la precisión el resultado ya no varía:
In [113]: decimal.getcontext().prec = 16
In [114]:
math.sin(decimal.Decimal(math.pi)/decimal.Decimal(2))/math.cos(decimal.Decimal(math.pi)/decimal.Decimal(2))
Out[114]: -2611942160735615.5
In [115]: decimal.getcontext().prec = 32
In [116]:
math.sin(decimal.Decimal(math.pi)/decimal.Decimal(2))/math.cos(decimal.Decimal(math.pi)/decimal.Decimal(2))
Out[116]: 1.633123935319537e+16
In [117]: decimal.getcontext().prec = 64
In [118]:
math.sin(decimal.Decimal(math.pi)/decimal.Decimal(2))/math.cos(decimal.Decimal(math.pi)/decimal.Decimal(2))
Out[118]: 1.633123935319537e+16
...
In [125]: decimal.getcontext().prec = 16
In [126]: math.tan(decimal.Decimal(math.pi)/decimal.Decimal(2))
Out[126]: -2611942160735615.5
In [127]: decimal.getcontext().prec = 32
In [128]: math.tan(decimal.Decimal(math.pi)/decimal.Decimal(2))
Out[128]: 1.633123935319537e+16
In [129]: decimal.getcontext().prec = 64
In [130]: math.tan(decimal.Decimal(math.pi)/decimal.Decimal(2))
Out[130]: 1.633123935319537e+16
...
Si hago, np.isinf(np.tan(np.pi/2)) me da, obviamente, False... :-P
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20130320/c7f4233d/attachment.html>
Más información sobre la lista de distribución Python-es