SSブログ

三角関数を用いて掛け算を行う その2 [今日のアニソン]

三角関数を用いて掛け算を行う その2

 

 

三角関数表と次の三角関数表を用いて、掛け算を行う方法を紹介した。

  

 

その際、実際に、この方法を用いて5150×3090の計算を計算してみたところ、精度よく計算できなかった。

これは掛け算に使われた数の桁数が互いに4桁と非常に短いためではないかと考え、次の掛け算で再挑戦してみることにする。

  766044443×529919264=405941707425849952

9桁同士の掛け算だにゃ。これならば、きっと正しい答えを導き出してくれるに違いない。

  

そして、ここで三角表を見て、

  

であるabを探すと、a=50°b=32°

したがって、

  

ここで再び、三角対数表を取り出し、cos18°cos82°の値を調べると、0.9510565160.139173101だから、

  

したがって、

 

  

左から9桁目の数字が87で違っているけれど(しかし、その差はわずかに1)、この計算法の有効数字がこの程度だから、この桁の数字が少し違うのはしょうがない。

科学計算で使用されるFORTRANの単精度(実数型32ビット)の計算の場合、0.01×1001にならない。

それに比べれば、この計算法は十分すぎるほどの精度を誇っているといって過言はないと思う。

 

「ネムネコ、ちょっと待った!!」

「何だにゃ、おじゃま虫。」

「お前、計算が一致するように、三角関数表にあるsin50°sin32°の数字を整数化し、766044443529919264という数字を引っ張りだしただろう。だったら、最初から、三角関数を用いたこの計算が有効数字程度で一致するように仕組まれているじゃないか。」

「たまたまの一致だにゃ。これは偶然。だから、妙な言いがかりは付けないでもらおうか!!」

 



実際、おじゃま虫の指摘通りなのですが、三角関数表と三角関数の積和公式を用いることで、桁数の大きい数同士の掛け算を、簡単な足し算と引き算に還元して計算できるというお話でした。

なお、ネムネコのPCにある電卓ソフトでこの掛け算を行うと、

  766044443×529919264=4.059417074×10¹⁷

となる。コンピュータは2進数で計算するので、32ビットだと、符号なしの整数で表せる最大の数字は2³²−1=4294967295となって、今回のような桁数の多い整数同士の掛け算の計算を整数として正確に計算できないんだケロ。64ビットでも2⁶⁴−1=1.844674407×10¹⁹だから、今回の掛け算はその限界能力に迫るものになっているのであった。たとえば、

  7660444431×5299192645

としたら、符号なしの64ビット整数ですら、この掛け算は整数として計算できない。そして、「こんな計算はできないケロ」というエラーメッセージを表示するのであった。(あくまで、これはC言語などで整数型データとして計算した場合の話。)


対数を使うと、この掛け算は次のようになる。

  

有効数字9桁で計算した場合、この掛け算に関しては、対数を用いた掛け算の計算よりも三角関数を用いた計算の方が精度よく計算されているにゃ。

対数を利用した計算に勝ったケロ!!

 

 

ちなみに有効数字10桁で計算すると、4.059417074×10¹⁷になる。

 


nice!(2)  コメント(0) 
共通テーマ:音楽

nice! 2

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。