こんにちわ
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°の例外処理って、
必要ないんじゃないかっていう・・・
まぁ、付けとくに越したことはないと思いますが。