コサイン90度は0にならない?
先日、仕事で三角関数を使う場面があったのですが、エクセルでcosの計算をしたところ、90°のところで結果が「0」にならず、一瞬ぽかーんとなってしまいました。
「あるぇ~、確かcos90°って0になるはずだよね?もしかして今まで勘違いしてたんだろうか(゜ρ゜)」
いや、そんなハズはない・・・でも、エクセル先生がお示しになるのは「6.12574E-17」っていう0に近いけれど、0じゃない数値なんだな・・・(゜ρ゜)
はて・・・?
ということで、疑問を解消するために少し調べたので、整理してみます。
まず、角度の単位についておさらい
デグリー:角度を度で表す
ラジアン:角度をπで表す
グラード:角度をg(1g=0.9度)で表す
Deg | Rad | Grad |
---|---|---|
0 | 0 | 0 |
30 | π/6 | 33.3・・・ |
45 | π/4 | 50 |
60 | π/3 | 66.6・・・ |
90 | π/2 | 100 |
180 | π | 200 |
270 | 1.5π | 300 |
360 | 2π | 400 |
ちなみに、電卓で「Deg」「Rad」「Grad」のモードがあると思いますが、これは角度の計算をどの単位で行うかを切り替えるものです。(今まで生きててGradは一度も使ったことがありませんが・・・(;^_^A)
んで、エクセルではどの単位で計算するのかというと「ラジアン」のほうで計算することになっています。
COS(90) ←×
COS(π/2) ←○
COS(100) ←×
πは関数PI()で取得できるので、数式にCOS(PI()/2)と入力するか、デグリーをラジアンに変換するRADIANS関数を入れ子にして、COS(RADIANS(90))と入力することになります。しかし、ここでコンピューターの限界が生じてしまいます。πは皆さんご存知のとおり、小数以下が循環せずに続く無理数です。
π=3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502・・・
エクセルで扱うことができる有効桁数は15桁まで
ここからが本題です。エクセルで扱うことができる有効桁数は15桁までなので、関数PI()の中に入っている円周率は、3.14159265358979の15桁までであり,これを計算に使うと僅かな誤差がでてしまいます。
理論的にcos90°は0ですが、エクセル先生はそんなことを知らずにクソまじめに15桁に打ち切られた数値を使って計算をし、結果、僅かな誤差を伴った答えを導きだすのです。
cos270°、sin180°、tan180°も同様です。
これを浮動小数点演算誤差の打切り誤差とゆーそうです。コンピューターには他にも多くの誤差があるそうで・・・機会があれば勉強してみます・・・ゴフッ(吐血)
ちょっと補足
sin0°やtan0°は引数にπを使っていないので、結果はちょうど0になります。
sin30°は引数にπを使うのでちょうど0.5にならないような気がしますが、有効桁数15桁超の誤差が打ち切られてちょうど0.5になっているように見えます(たぶん)
sin90°も引数にπを使うのでちょうど、1にならないような気がしますが、有効桁数15桁超が切り捨てられてちょうど1になっているように見えます(たぶん)
その他は、誤差があってもわからないレベルの世界。
まとめ!
有効桁数15桁で打ち切られた円周率(もどき)を使って計算するため、僅かな誤差が生じる。誤差は非常に僅かなので、ほとんど分からないが・・・0が0でなくなってしまった場合には誤差が大きいと感じてします。無と有は違うものなので、コンピューターの中で誤差が生じていることを理解しておきましょう!