El 20 de marzo de 2013 12:37, Jose Caballero <jcaballero....@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
_______________________________________________
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a