goo blog サービス終了のお知らせ 

まったり アイマス2

アイドルマスター2 超ライトユーザーのプレイ日記

3184. 三角関数の加法定理、続き

2020年09月29日 | 日記

 計算機科学の観点からは、加法定理には実用の価値があります。
 先にそれを言ってくれよ、と思われた方、多数でしょうが、私もそうだったので、ここは我慢してください。

 つまり、ある関数に加法定理があれば、普通の整数・実数の掛け算と割り算のアルゴリズムを少し変えただけのアルゴリズムが使える可能性が出てきます。
 これはハード化が可能、を意味していて、ものすごい速度(実質1クロック)で演算可能となります。

 現在のパソコンのCPU、x86/x64には平方根だけでは無く、指数関数、対数関数、三角関数(いわゆる初等関数)の機械語があって、現在はハード化されています。
 私の思い出だと、Intel 8087と呼ばれるICが出たときは衝撃的でした。現在、IEEE浮動小数点数と呼ばれている、計算機では他に理由が無ければ普通に使われる浮動小数点数の形式は、ここが原点です。
 一応、浮動小数点ハードは他にもありましたが、8087は傑出していて、最初から初等関数のマイクロプログラムが入っていました。三角関数はtanとarctanの部分関数で、当然、sinもcosもtan等から高速に計算できます。当時はCORDICと呼ばれる新しいアルゴリズムと宣伝されましたが、現在の観点からは、普通の掛け算と割り算の改良アルゴリズムと思います。

 掛け算だと、ハードを大量投入すると高速化が可能なことは容易に想像できると思います。論理回路による18bit程度の乗算器は実在して、実用です。複数の乗算器と加算器を適当に組み合わせると任意の精度の乗算器が手に入ることは容易に想像できると思います。
 割り算は普通は逐次処理になって、ビット数分のクロックが必要でしょう。
 しかし、割り算はパイプライン化、つまり流れ作業が可能です。その1ステップをハードにして、ステップ分のハードを並べて直列すると、いわゆるレイテンシ(遅延)はあるものの、1クロックごとにデータを投入できて、1クロックごとに結果が得られるので、多量のデータがあればですが、平均すると1データの関数計算の時間は1クロックになってしまいます。

 実際には加法定理がハード化に使われるかどうかは、ケースバイケースと思います。たとえば私なら、三角関数なら、単精度浮動小数点数の場合は代数式(多項式)、つまり無限級数の最初の方で打ち切ります。たとえば16bit整数程度なら3次関数とか4次関数とか。精度を上げたければ、ええと歯車機構のバベッジの階差エンジンの精度と次数はいくらだったか。
 倍精度浮動小数点数となると手強くて、多項式では精度が不安になります。そうですね、私なら連分数(無限級数の一種。特異的な定数(黄金比など)の展開の一種と紹介されることが多いが、関数にも使える)の関数をtanとarctanで使うと思います。
 しかし、加法定理があれば、最後の最後はそこに頼ることが出来ます。適切な他の方法が見つからなければ、加法定理を使えば(具体的数値が)実用範囲で計算できる、の感じです。


コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 3183. 次世代機の予約 | トップ | 3185. 有機ELパネルの本 »
最新の画像もっと見る

コメントを投稿

サービス終了に伴い、10月1日にコメント投稿機能を終了させていただく予定です。
ブログ作成者から承認されるまでコメントは反映されません。

日記」カテゴリの最新記事