2

角度 (ラジアン単位) の正確なタンジェント/コサイン/サインを取得する方法はありますか?

math.tan()//角度によっては正確なmath.sin()math.cos()が得られない:

>>> from math import *
>>> from decimal import Decimal
>>> sin(pi) # should be 0
1.2246467991473532e-16
>>> sin(2*pi) # should be 0
-2.4492935982947064e-16
>>> cos(pi/2) # should be 0
6.123233995736766e-17
>>> cos(3*pi/2) # 0
-1.8369701987210297e-16
>>> tan(pi/2) # invalid; tan(pi/2) is undefined
1.633123935319537e+16
>>> tan(3*pi/2) # also undefined
5443746451065123.0
>>> tan(2*pi) # 0
-2.4492935982947064e-16
>>> tan(pi) # 0
-1.2246467991473532e-16

Decimal() を使用してみましたが、これも役に立ちません。

>>> tan(Decimal(pi)*2)
-2.4492935982947064e-16

numpy.sin(x)他の三角関数にも同じ問題があります。

または、次のような値の辞書を使用して、常に新しい関数を作成することもできます。

def new_sin(x):
    sin_values = {math.pi: 0, 2*math.pi: 0}
    return sin_values[x] if x in sin_values.keys() else math.sin(x)

しかし、これはそれを回避するための安価な方法のようです。他に方法はありますか?ありがとう!

4

2 に答える 2