[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