角度 (ラジアン単位) の正確なタンジェント/コサイン/サインを取得する方法はありますか?
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)
しかし、これはそれを回避するための安価な方法のようです。他に方法はありますか?ありがとう!