[Python3] math.tan(90°)は計算可能か?

こんにちわ

pythonで、三角関数を使うことがあったんですが、
三角関数で、tan 90°って、ないじゃないですか。

なので、math.tan()メソッドにかける前に、
Θ= 90°の時には分岐して別の処理が必要だなぁ・・・

mport math
import random

degree = random.randint(0, 180)
print(degree)

if degree == 90:
    print('tan() is not defined')
else:
    rad = math.radians(degree)
    print(math.tan(rad))

# 実行結果
77
4.331475874284157

と思ったんですけど、
pythonで、math.tan()を使うときは、引数をラジアンに直す。
math — 数学関数

90°をラジアンに直すとπ/2で、無限小数になるから、
プログラム内でπ/2を計算して、math.tan()に渡しても、
渡した引数は丸められていて、厳密にはπ/2じゃないから、
もしかしたらエラーにならないんじゃないか?

って思ったので試してみます。

テキトーにこんな感じでプログラム書いて、

import math
rad = math.radians(90)
print(math.tan(rad))

# 実行結果
1.633123935319537e+16

エラーになりませんでしたねw

これはもちろん、270°についても同様で、

import math
rad = math.radians(270)
print(math.tan(rad))

# 実行結果
5443746451065123.0

何かしら値が返ってきます。

ちなみに、mathモジュールの中には、
piプロパティがあって、
これを使った場合も、試しにやってみました。

import math
print(math.tan(math.pi/2))

# 実行結果
1.633123935319537e+16

うん、一緒になりましたね。
多分ですけど、radiansメソッドの中で、
piプロパティを使ってるんでしょう。

さらに、ちなみになんですが、
cosを計算してみる。

import math
rad = math.radians(90)
print(math.cos(rad))

# 実行結果
6.123233995736766e-17

かなり小さいんですけど、
0にはならないんですね。

tanΘ = sinΘ / cosΘ

なので、
分母が0にならなければ大丈夫でしょうということで。

で、ほかの言語もざっと調べてみたんですが、
大体どの言語も、三角関数の引数はラジアン指定なので、
ほかの言語でも同じことが言えそうです。

試しにPHP

<?php
    $rad = deg2rad(90);
    echo tan($rad);

# 実行結果
1.6331239353195E+16

返り値は若干違うものの、
エラーにはなりませんね。

なので、ぶっちゃけ、
tan 90°の例外処理って、
必要ないんじゃないかっていう・・・

まぁ、付けとくに越したことはないと思いますが。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です