(57)【要約】【課題】三角関数や双曲線関数等の関数計算を高速且つ低コストで行うことができる演算方法及び装置、プログラム並びに記録媒体を提供する。【解決手段】三角関数のｓｉｎ（θ）、ｃｏｓ（θ）を求める場合に、θを級数の和で表ことで、三角関数の加法定理を用いて、除算、平方根計算を含まないように変形し、変形した漸化式の反復計算（ステップＳ２〜ステップＳ５）を行い、最終的な値を用いてステップＳ６に示すように関数値を求める。この計算アルゴリズムを演算装置やプログラムに使用することで、高速に三角関数の演算ができる。双曲線関数についても、同様に関数値を求めることができる。【選択図】　　　　図１
2004126872.tif 000002
【特許請求の範囲】
【請求項１】
三角関数の正弦値と余弦値とを演算する演算方法において、下記の式（１）および式（２）に示すように、余弦値をＸＭとし、正弦値をＹＭとし、引数を級数の和で表現する。
【数１】
2004126872.tif 000038
【数２】
2004126872.tif 000039
Ｚｊ＝ｃｏｓ（ｆｊ）×Ｚｊ−１、Ｘｊ＝ｘｊ×Ｚｊ、Ｙｊ＝ｙｊ×Ｚｊと置き、三角関数の加法定理により上記の式（１）および式（２）をそれぞれ変形した下記の式（３）および式（４）と、式（５）とからなる漸化式をそれぞれ反復計算する。
ｘｊ＝ｘｊ−１−ｔａｎ（ｆｊ）×ｙｊ−１　　　・・・（３）
ｙｊ＝ｙｊ−１＋ｔａｎ（ｆｊ）×ｘｊ−１　　　・・・（４）
Ｚｊ＝Ｚｊ−１×ｃｏｓ（ｆｊ）　　　　　・・・（５）
（ｊ＝Ｎ，Ｎ＋１，…，Ｍ−１，Ｍ（Ｍ≧Ｎ）、初期値：ｘＮ−１＝１、ｙＮ−１＝０、ＺＮ−１＝１）
上記の式（３）〜式（５）で求められたｘＭ、ｙＭおよびＺＭから下記の式（６）および式（７）により余弦値ＸＭ、正弦値ＹＭ　を計算する
ことを特徴とする演算方法。
ＸＭ＝ｘＭ×ＺＭ　　　・・・（６）
ＹＭ＝ｙＭ×ＺＭ　　　・・・（７）
【請求項２】
ｃｏｓ（ｆｊ）、ｔａｎ（ｆｊ）の値が記述されているデータテーブルを参照することを特徴とする請求項１に記載の演算方法。
【請求項３】
上記級数の和が２進数の級数の和であり、ｆｊ＝（ビット値）×２ｊで表すことを特徴とする請求項１に記載の演算方法。
【請求項４】
上記ビット値が「０」または「１」であり、ビット値が「１」の場合にのみ上記式（５）が成り立ち、ビット値が「０」の場合には、式（５）がＺｊ＝Ｚｊ−１となるように、上記式（５）を下記式（８）とすることを特徴とする請求項３に記載の演算方法。
Ｚｊ＝Ｚｊ−１［（１−ｑｊ）＋ｑｊ×ｃｏｓ（２ｊ）］　　　・・・（８）
（ｑｊはビット値）
【請求項５】
上記ビット値が「０」、「１」または「−１」の冗長表現であり、ビット値が「１」または「−１」の場合にのみ上記式（５）が成り立ち、ビット値が「０」の場合には、式（５）がＺｊ＝Ｚｊ−１となるように、上記式（５）を下記式（９）とすることを特徴とする請求項３に記載の演算方法。
Ｚｊ＝Ｚｊ−１［（１−ｑｊ２）＋ｑｊ２×ｃｏｓ（２ｊ）］　　　・・・（９）
（ｑｊはビット値）
【請求項６】
上記級数の和を２のべき乗の逆正接の級数の和で表し、上記の式（３）〜式（５）を変形し、上記の式（３）および式（４）における反復計算での乗算をビットシフトにより行うことを特徴とする請求項１に記載の演算方法。
【請求項７】
ｃｏｓ（ｔａｎ−１（２ｊ））の値が記述されているデータテーブルを参照することを特徴とする請求項６に記載の演算方法。
【請求項８】
双曲線関数の正弦値と余弦値とを演算する演算方法において、
下記の式（１０）および式（１１）に示すように、余弦値をＸＭとし、正弦値をＹＭとし、引数を級数の和で表現する。
【数３】
2004126872.tif 000040
【数４】
2004126872.tif 000041
Ｚｊ＝ｃｏｓｈ（ｆｊ）×Ｚｊ−１、Ｘｊ＝ｘｊ×Ｚｊ、Ｙｊ＝ｙｊ×Ｚｊと置き、双曲線関数の加法定理により上記の式（１０）および式（１１）をそれぞれ変形した下記の式（１２）および式（１３）と、式（１４）とからなる漸化式をそれぞれ反復計算する。
ｘｊ＝ｘｊ−１＋ｔａｎｈ（ｆｊ）×ｙｊ−１　　　・・・（１２）
ｙｊ＝ｘｊ−１＋ｔａｎｈ（ｆｊ）×ｘｊ−１　　　・・・（１３）
Ｚｊ＝Ｚｊ−１×ｃｏｓｈ（ｆｊ）　　　　　・・・（１４）
（ｊ＝Ｎ，Ｎ＋１，…，Ｍ−１，Ｍ（Ｍ≧Ｎ）、初期値：ｘＮ−１＝１、ｙＮ−１＝０、ＺＮ−１＝１）
上記の式（１２）〜式（１４）で求められたｘＭ、ｙＭおよびＺＭから下記の式（１５）および式（１６）により余弦値ＸＭ、正弦値ＹＭ　を計算する
ことを特徴とする演算方法。
ＸＭ＝ｘＭ×ＺＭ　　　・・・（１５）
ＹＭ＝ｙＭ×ＺＭ　　　・・・（１６）
【請求項９】
ｃｏｓｈ（ｆｊ）、ｔａｎｈ（ｆｊ）の値が記述されているデータテーブルを参照することを特徴とする請求項８に記載の演算方法。
【請求項１０】
上記級数の和が２進数の級数の和であり、ｆｊ＝（ビット値）×２ｊで表すことを特徴とする請求項８に記載の演算方法。
【請求項１１】
上記ビット値が「０」または「１」であり、ビット値が「１」の場合にのみ上記式（１４）が成り立ち、ビット値が「０」の場合には、式（１４）がＺｊ＝Ｚｊ−１となるように、上記式（１４）を下記式（１７）とすることを特徴とする請求項１０に記載の演算方法。
Ｚｊ＝Ｚｊ−１［（１−ｑｊ）＋ｑｊ×ｃｏｓｈ（２ｊ）］　　　・・・（１７）
（ｑｊはビット値）
【請求項１２】
上記ビット値が「０」、「１」または「−１」の冗長表現であり、ビット値が「１」または「−１」の場合にのみ上記式（１４）が成り立ち、ビット値が「０」の場合には、式（１４）がＺｊ＝Ｚｊ−１となるように、上記式（１４）を下記式（１８）とすることを特徴とする請求項１０に記載の演算方法。
Ｚｊ＝Ｚｊ−１［（１−ｑｊ２）＋ｑｊ２×ｃｏｓｈ（２ｊ）］　　　・・・（１８）
（ｑｊはビット値）
【請求項１３】
上記級数の和を２のべき乗の逆正接の級数の和で表し、上記の式（１２）〜式（１４）を変形し、上記の式（１２）および式（１３）における反復計算での乗算をビットシフトにより行うことを特徴とする請求項８に記載の演算方法。
【請求項１４】
ｃｏｓｈ（ｔａｎｈ−１（２ｊ））の値が記述されているデータテーブルを参照することを特徴とする請求項１３に記載の演算方法。
【請求項１５】
三角関数の正弦値と余弦値とを演算する演算装置において、
下記の式（１９）および式（２０）に示すように、余弦値をＸＭとし、正弦値をＹＭとし、引数を級数の和で表現する。
【数５】
2004126872.tif 000042
【数６】
2004126872.tif 000043
Ｚｊ＝ｃｏｓ（ｆｊ）×Ｚｊ−１、Ｘｊ＝ｘｊ×Ｚｊ、Ｙｊ＝ｙｊ×Ｚｊと置き、三角関数の加法定理により上記の式（１９）および式（２０）をそれぞれ変形した下記の式（２１）および式（２２）と、式（２３）とからなる漸化式をそれぞれ反復計算する。
ｘｊ＝ｘｊ−１−ｔａｎ（ｆｊ）×ｙｊ−１　　　・・・（２１）
ｙｊ＝ｙｊ−１＋ｔａｎ（ｆｊ）×ｘｊ−１　　　・・・（２２）
Ｚｊ＝Ｚｊ−１×ｃｏｓ（ｆｊ）　　　　　・・・（２３）
（ｊ＝Ｎ，Ｎ＋１，…，Ｍ−１，Ｍ（Ｍ≧Ｎ）、初期値：ｘＮ−１＝１、ｙＮ−１＝０、ＺＮ−１＝１）
上記の式（２１）〜式（２３）で求められたｘＭ、ｙＭおよびＺＭから下記の式（２４）および式（２５）により余弦値ＸＭ、正弦値ＹＭ　を計算する
ことを特徴とする演算装置。
ＸＭ＝ｘＭ×ＺＭ　　　・・・（２４）
ＹＭ＝ｙＭ×ＺＭ　　　・・・（２５）
【請求項１６】
双曲線関数の正弦値と余弦値とを演算する演算装置において、
下記の式（２６）および式（２７）に示すように、余弦値をＸＭとし、正弦値をＹＭとし、引数を級数の和で表現する。
【数７】
2004126872.tif 000044
【数８】
2004126872.tif 000045
Ｚｊ＝ｃｏｓｈ（ｆｊ）×Ｚｊ−１、Ｘｊ＝ｘｊ×Ｚｊ、Ｙｊ＝ｙｊ×Ｚｊと置き、双曲線関数の加法定理により上記の式（２６）および式（２７）をそれぞれ変形した下記の式（２８）および式（２９）と、式（３０）とからなる漸化式をそれぞれ反復計算する。
ｘｊ＝ｘｊ−１＋ｔａｎｈ（ｆｊ）×ｙｊ−１　　　・・・（２８）
ｙｊ＝ｙｊ−１＋ｔａｎｈ（ｆｊ）×ｘｊ−１　　　・・・（２９）
Ｚｊ＝Ｚｊ−１×ｃｏｓｈ（ｆｊ）　　　　　・・・（３０）
（ｊ＝Ｎ，Ｎ＋１，…，Ｍ−１，Ｍ（Ｍ≧Ｎ）、初期値：ｘＮ−１＝１、ｙＮ−１＝０、ＺＮ−１＝１）
上記の式（２８）〜式（３０）で求められたｘＭ、ｙＭおよびＺＭから下記の式（３１）および式（３２）により余弦値ＸＭ、正弦値ＹＭ　を計算する
ことを特徴とする演算装置。
ＸＭ＝ｘＭ×ＺＭ　　　・・・（３１）
ＹＭ＝ｙＭ×ＺＭ　　　・・・（３２）
【請求項１７】
三角関数の正弦値と余弦値とを演算するプログラムにおいて、
下記の式（３３）および式（３４）に示すように、余弦値をＸＭとし、正弦値をＹＭとし、引数を級数の和で表現する。
【数９】
2004126872.tif 000046
【数１０】
2004126872.tif 000047
Ｚｊ＝ｃｏｓ（ｆｊ）×Ｚｊ−１、Ｘｊ＝ｘｊ×Ｚｊ、Ｙｊ＝ｙｊ×Ｚｊと置き、三角関数の加法定理により上記の式（３３）および式（３４）をそれぞれ変形した下記の式（３５）および式（３６）と、式（３７）とからなる漸化式をそれぞれ反復計算する。
ｘｊ＝ｘｊ−１−ｔａｎ（ｆｊ）×ｙｊ−１　　　・・・（３５）
ｙｊ＝ｙｊ−１＋ｔａｎ（ｆｊ）×ｘｊ−１　　　・・・（３６）
Ｚｊ＝Ｚｊ−１×ｃｏｓ（ｆｊ）　　　　　・・・（３７）
（ｊ＝Ｎ，Ｎ＋１，…，Ｍ−１，Ｍ（Ｍ≧Ｎ）、初期値：ｘＮ−１＝１、ｙＮ−１＝０、ＺＮ−１＝１）
上記の式（３５）〜式（３７）で求められたｘＭ、ｙＭおよびＺＭから下記の式（３８）および式（３９）により余弦値ＸＭ、正弦値ＹＭ　を計算する
ことを特徴とするプログラム。
ＸＭ＝ｘＭ×ＺＭ　　　・・・（３８）
ＹＭ＝ｙＭ×ＺＭ　　　・・・（３９）
【請求項１８】
双曲線関数の正弦値と余弦値とを演算するプログラムにおいて、
下記の式（４０）および式（４１）に示すように、余弦値をＸＭとし、正弦値をＹＭとし、引数を級数の和で表現する。
【数１１】
2004126872.tif 000048
【数１２】
2004126872.tif 000049
Ｚｊ＝ｃｏｓｈ（ｆｊ）×Ｚｊ−１、Ｘｊ＝ｘｊ×Ｚｊ、Ｙｊ＝ｙｊ×Ｚｊと置き、双曲線関数の加法定理により上記の式（４０）および式（４１）をそれぞれ変形した下記の式（４２）および式（４３）と、式（４４）とからなる漸化式をそれぞれ反復計算する。
ｘｊ＝ｘｊ−１＋ｔａｎｈ（ｆｊ）×ｙｊ−１　　　・・・（４２）
ｙｊ＝ｙｊ−１＋ｔａｎｈ（ｆｊ）×ｘｊ−１　　　・・・（４３）
Ｚｊ＝Ｚｊ−１×ｃｏｓｈ（ｆｊ）　　　　　・・・（４４）
（ｊ＝Ｎ，Ｎ＋１，…，Ｍ−１，Ｍ（Ｍ≧Ｎ）、初期値：ＸＮ−１＝１、ＹＮ−１＝０、ＺＮ−１＝１）
さらに、上記の式（４２）〜式（４４）で求められたｘＭ、ｙＭおよびＺＭから下記の式（４５）および式（４６）により余弦値ＸＭ、正弦値ＹＭ　を計算する
ことを特徴とするプログラム。
ＸＭ＝ｘＭ×ＺＭ　　　・・・（４５）
ＹＭ＝ｙＭ×ＺＭ　　　・・・（４６）
【請求項１９】
三角関数の正弦値と余弦値とを演算するプログラムが記録された記録媒体において、
下記の式（４７）および式（４８）に示すように、余弦値をＸＭとし、正弦値をＹＭとし、引数を級数の和で表現する。
【数１３】
2004126872.tif 000050
【数１４】
2004126872.tif 000051
Ｚｊ＝ｃｏｓ（ｆｊ）×Ｚｊ−１、Ｘｊ＝ｘｊ×Ｚｊ、Ｙｊ＝ｙｊ×Ｚｊと置き、三角関数の加法定理により上記の式（４７）および式（４８）をそれぞれ変形した下記の式（４９）および式（５０）と、式（５１）とからなる漸化式をそれぞれ反復計算する。
ｘｊ＝ｘｊ−１−ｔａｎ（ｆｊ）×ｙｊ−１　　　・・・（４９）
ｙｊ＝ｙｊ−１＋ｔａｎ（ｆｊ）×ｘｊ−１　　　・・・（５０）
Ｚｊ＝Ｚｊ−１×ｃｏｓ（ｆｊ）　　　　　・・・（５１）
（ｊ＝Ｎ，Ｎ＋１，…，Ｍ−１，Ｍ（Ｍ≧Ｎ）、初期値：ｘＮ−１＝１、ｙＮ−１＝０、ＺＮ−１＝１）
さらに、上記の式（４９）〜式（５１）で求められたｘＭ、ｙＭおよびＺＭから下記の式（５２）および式（５３）により余弦値ＸＭ、正弦値ＹＭ　を計算する
プログラムを記録したコンピュータ読み取り可能な記録媒体。
ＸＭ＝ｘＭ×ＺＭ　　　・・・（５２）
ＹＭ＝ｙＭ×ＺＭ　　　・・・（５３）
【請求項２０】
磁気的メモリからなることを特徴とする請求項１９に記載の記録媒体。
【請求項２１】
電気的メモリからなることを特徴とする請求項１９に記載の記録媒体。
【請求項２２】
双曲線関数の正弦値と余弦値とを演算するプログラムが記録された記録媒体において、
下記の式（５４）および式（５５）に示すように、余弦値をＸＭとし、正弦値をＹＭとし、引数を級数の和で表現する。
【数１５】
2004126872.tif 000052
【数１６】
2004126872.tif 000053
Ｚｊ＝ｃｏｓｈ（ｆｊ）×Ｚｊ−１、Ｘｊ＝ｘｊ×Ｚｊ、Ｙｊ＝ｙｊ×Ｚｊと置き、双曲線関数の加法定理により上記の式（５４）および式（５５）をそれぞれ変形した下記の式（５６）および式（５７）と、式（５８）とからなる漸化式をそれぞれ反復計算する。
ｘｊ＝ｘｊ−１＋ｔａｎｈ（ｆｊ）×ｙｊ−１　　　・・・（５６）
ｙｊ＝ｙｊ−１＋ｔａｎｈ（ｆｊ）×ｘｊ−１　　　・・・（５７）
Ｚｊ＝Ｚｊ−１×ｃｏｓｈ（ｆｊ）　　　　　・・・（５８）
（ｊ＝Ｎ，Ｎ＋１，…，Ｍ−１，Ｍ（Ｍ≧Ｎ）、初期値：ｘＮ−１＝１、ｙＮ−１＝０、ＺＮ−１＝１）
さらに、上記の式（５６）〜式（５８）で求められたｘＭ、ｙＭおよびＺＭから下記の式（５９）および式（６０）により余弦値ＸＭ、正弦値ＹＭ　を計算する
プログラムを記録したコンピュータ読み取り可能な記録媒体。
ＸＭ＝ｘＭ×ＺＭ　　　・・・（５９）
ＹＭ＝ｙＭ×ＺＭ　　　・・・（６０）
【請求項２３】
磁気的メモリからなることを特徴とする請求項２２に記載の記録媒体。
【請求項２４】
電気的メモリからなることを特徴とする請求項２２に記載の記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、三角関数や双曲線関数等の関数の計算を行うための演算方法及び装置、プログラム並びに記録媒体に関するものである。
【０００２】
【従来の技術】
近年、Ｃ言語、ＶＨＤＬまたはｖｅｒｉｌｏｇなどの回路記述言語により、アルゴリズムの回路化、即ちアルゴリズムに沿って動作し、関数等の計算を行う回路を生成することができるようになった。これにより、計算速度の向上が可能となった。
【０００３】
例えば、三角関数は、ゲーム機器で画面のグラフィックを動かす時などに頻繁に行われている３次元映像を２次元映像面へ投影するような計算において重要とされている。高速で三角関数を計算するアルゴリズムと、それを回路化することにより、より早いスピードで３Ｄ画面等を動かすことができ、ゲームのリアル感を向上することができる。
【０００４】
従来の三角関数の計算アルゴリズムとして反復計算を利用するものがある。以下に、従来の反復計算を用いた三角関数の計算法についての一例を示す。以下に示す方法は、ＣＯＲＤＩＣ法と呼ばれ、電卓等で実用化されているものである。ＣＯＲＤＩＣ法は、関数を２次元平面上のベクトルと捉えて、ベクトルの回転の反復計算によって関数値を求めるものである。小数点以下Ｎビットの精度でｓｉｎ（θ）、ｃｏｓ（θ）の計算を行う場合、以下に示すＸ０、Ｙ０、Ｚ０の値を初期値とする。
【０００５】
【数１７】
2004126872.tif 000003
【０００６】
このとき、下記の漸化式をＮ＋１回反復する事で三角関数を計算することが出来る。
【０００７】
Ｘｊ　＝　Ｘｊ−１−ｑｊ−１・２−（ｊ−１）・Ｙｊ−１
Ｙｊ　＝　Ｙｊ−１＋ｑｊ−１・２−（ｊ−１）・Ｘｊ−１
Ｚｊ　＝　Ｚｊ−１−ｑｊ−１・ｔａｎ−１（２−（ｊ−１））
（ｑｊ−１　は、１、−１のうち、θ−　Ｚｊ　が０に近くなるものを選ぶ。）
【０００８】
図１４は、Ｘ　＝　Ｘｊ、Ｙ　＝　Ｙｊ、Ｚ　＝　Ｚｊ　として、従来の三角関数を計算する場合のアルゴリズムの一例である。このアルゴリズムは、引数θを下記のように示した場合の三角関数の計算アルゴリズムである。
【０００９】
【数１８】
2004126872.tif 000004
【００１０】
図１４中の変数Ｉは、読み出しを行っているビット位置のインデックスである。最下位桁（Ｉ＝Ｎ）の場合、初期値として、Ｉ＝−１、Ｘ＝１、Ｙ＝０、Ｚ＝１、Ｒ＝θ　をそれぞれ代入する（ステップＳ１０１）。次に、Ｉ＝Ｍ　であるか否かが判定される（ステップＳ１０２）。ステップＳ１０２において、「Ｙｅｓ」すなわち、Ｉ＝Ｍ　であると判定された場合には、ステップＳ１０８に進む。ステップＳ１０２において、「Ｎｏ」すなわち、Ｉ＝Ｍ　でないと判定された場合には、ステップＳ１０３に進む。
【００１１】
ステップＳ１０３では、変数Ｉをインクリメント、すなわち、Ｉ＝Ｉ＋１　とし、続いて、ＲＰ　＝　Ｒ−ｔａｎ−１（２Ｉ）、ＲＮ　＝　Ｒ＋ｔａｎ−１（２Ｉ）をそれぞれ計算する（ステップＳ１０４）。次に、｜ＲＰ｜　≦　｜ＲＮ｜であるか否かを判定する（ステップＳ１０５）。
【００１２】
ステップＳ１０５において、「Ｙｅｓ」すなわち、｜ＲＰ｜　≦　｜ＲＮ｜　であると判定された場合には、ステップＳ１０６に進む。ステップＳ１０６では、以下の計算をそれぞれ行い、Ｘ、Ｙ、Ｚの値を逐次更新する。
【００１３】
Ｘ　＝　Ｘ−２Ｉ・Ｙ
Ｙ　＝　Ｙ＋２Ｉ・Ｘ
Ｚ　＝　Ｚ（１＋２Ｉ）
【００１４】
ステップＳ１０６においてＸ、Ｙ、Ｚの値を更新し、Ｒ　＝　ＲＰ　とした後、ステップＳ１０２に戻る。
【００１５】
ステップＳ１０５において、「Ｎｏ」すなわち、｜ＲＰ｜　≦　｜ＲＮ｜でないと判定された場合には、ステップＳ１０７に進む。ステップＳ１０７では、以下の計算をそれぞれ行い、Ｘ、Ｙ、Ｚの値を逐次更新する。
【００１６】
Ｘ　＝　Ｘ＋２Ｉ・Ｙ
Ｙ　＝　Ｙ−２Ｉ・Ｘ
Ｚ　＝　Ｚ（１＋２Ｉ）
【００１７】
ステップＳ１０７においてＸ、Ｙ、Ｚの値を更新し、Ｒ　＝　ＲＮ　とした後、ステップＳ１０２に戻る。
【００１８】
ステップＳ１０８では、最終的に求まるＸ、Ｙ、Ｚから、下記の式を使いｃｏｓ（θ）、ｓｉｎ（θ）を計算する。
【００１９】
【数１９】
2004126872.tif 000005
【００２０】
必要に応じて、ｔａｎ（θ）等のｓｉｎ（θ）　、ｃｏｓ（θ）の関数は、ステップＳ１０１〜ステップＳ１０８で求まったｓｉｎ（θ）　、ｃｏｓ（θ）から計算する。
【００２１】
また、双曲線関数も三角関数と同様な考え方で反復計算を用いて計算を行うことができる。図１５は、従来の双曲線関数を計算する場合のアルゴリズムの一例である。最下位桁（Ｉ＝Ｎ）の場合、初期値として、Ｉ＝−１、Ｘ＝１、Ｙ＝０、Ｚ＝１、Ｒ＝θ　をそれぞれ代入する（ステップＳ１０９）。次に、Ｉ＝Ｍ　であるか否かが判定される（ステップＳ１１０）。ステップＳ１１０において、「Ｙｅｓ」すなわち、Ｉ＝Ｍ　であると判定された場合には、ステップＳ１１６に進む。ステップＳ１１０において、「Ｎｏ」すなわち、Ｉ＝Ｍ　でないと判定された場合には、ステップＳ１１１に進む。
【００２２】
ステップＳ１１１では、変数Ｉをインクリメント、すなわち、Ｉ＝Ｉ＋１　とし、続いて、ＲＰ　＝　Ｒ−ｔａｎｈ−１（２Ｉ）、ＲＮ　＝　Ｒ＋ｔａｎｈ−１（２Ｉ）をそれぞれ計算する（ステップＳ１１２）。次に、｜ＲＰ｜　≦　｜ＲＮ｜であるか否かを判定する（ステップＳ１１３）。
【００２３】
ステップＳ１１３において、「Ｙｅｓ」すなわち、｜ＲＰ｜　≦　｜ＲＮ｜　であると判定された場合には、ステップＳ１１４に進む。ステップＳ１１４では、以下の計算をそれぞれ行い、Ｘ、Ｙ、Ｚの値を逐次更新する。
【００２４】
Ｘ　＝　Ｘ＋２Ｉ・Ｙ
Ｙ　＝　Ｙ＋２Ｉ・Ｘ
Ｚ　＝　Ｚ（２Ｉ−１）
【００２５】
ステップＳ１１４においてＸ、Ｙ、Ｚの値を更新し、Ｒ　＝　ＲＰ　とした後、ステップＳ１１０に戻る。
【００２６】
ステップＳ１１３において、「Ｎｏ」すなわち、｜ＲＰ｜　≦　｜ＲＮ｜でないと判定された場合には、ステップＳ１１５に進む。ステップＳ１１５では、以下の計算をそれぞれ行い、Ｘ、Ｙ、Ｚの値を逐次更新する。
【００２７】
Ｘ　＝　Ｘ−２Ｉ・Ｙ
Ｙ　＝　Ｙ−２Ｉ・Ｘ
Ｚ　＝　Ｚ（２Ｉ−１）
【００２８】
ステップＳ１０７においてＸ、Ｙ、Ｚの値を更新し、Ｒ　＝　ＲＮ　とした後、ステップＳ１０２に戻る。
【００２９】
ステップＳ１０８では、最終的に求まるＸ、Ｙ、Ｚから、下記の式を使いｃｏｓｈ（θ）、ｓｉｎｈ（θ）を計算する。
【００３０】
【数２０】
2004126872.tif 000006
【００３１】
必要に応じて、ｔａｎｈ（θ）等のｓｉｎｈ（θ）　、ｃｏｓｈ（θ）の関数は、ステップＳ１０９〜ステップＳ１１６で求まったｓｉｎｈ（θ）　、ｃｏｓｈ（θ）から計算する。
【００３２】
【発明が解決しようとする課題】
しかしながら、上述したような従来の計算アルゴリズムでは、計算の遅い割り算及び、平方根演算等を含む為、除算器の導入や専用回路の導入によるコストの増加、除算を加算器や乗算器で代替する事による計算時間の増大等を招くという問題がある。
【００３３】
そこで近年、除算、平方根演算を伴わないように、三角関数もしくは双曲線関数の引数θを、下記の式に示す様に、２進数で展開し（ｑｊ　＝　０，１又は、ｑｊ　＝　０，±１）、これにオイラーの法則を適用する事で、除算を行うことなく、これらの関数の抽出を実現するアルゴリズムが特願２００１−２９４４０２に提案されている。
【００３４】
【数２１】
2004126872.tif 000007
【００３５】
このアルゴリズムでは、除算や、平方根計算が必要ない上、統計的には、各桁のビットが「０」または「１」を取る確率は１／２である為、平均すると計算に要する反復計算の回数がＣＯＲＤＩＣ法に比べ半分程度で済むというメリットがある。しかしながら、ＣＯＲＤＩＣ法では計算に表れる乗算は、例えば、２−（ｊ−１）　Ｙｊ−１　のようにビットシフトのみで済むのに対し、このアルゴリズムではｃｏｓ（２ｊ）やｓｉｎ（２ｊ）等との積を含む為、１回辺りの反復計算に要する時間については長くなる事が予想される。
【００３６】
【００３７】
したがって、この発明の目的は、計算速度を向上し、且つ計算回路等のコストをかけずに、三角関数や双曲線関数等の関数を計算できる演算方法及び装置、プログラム並びに記録媒体を提供することにある。
【００３８】
【課題を解決するための手段】
上述した課題を解決するために、請求項１の発明は、
三角関数の正弦値と余弦値とを演算する演算方法において、
下記の式（６１）および式（６２）に示すように、余弦値をＸＭとし、正弦値をＹＭとし、引数を級数の和で表現する。
【００３９】
【数２２】
2004126872.tif 000008
【数２３】
2004126872.tif 000009
Ｚｊ＝ｃｏｓ（ｆｊ）×Ｚｊ−１、Ｘｊ＝ｘｊ×Ｚｊ、Ｙｊ＝ｙｊ×Ｚｊと置き、三角関数の加法定理により上記の式（６１）および式（６２）をそれぞれ変形した下記の式（６３）および式（６４）と、式（６５）とからなる漸化式をそれぞれ反復計算する。
【００４０】
ｘｊ＝ｘｊ−１−ｔａｎ（ｆｊ）×ｙｊ−１　　　・・・（６３）
ｙｊ＝ｙｊ−１＋ｔａｎ（ｆｊ）×ｘｊ−１　　　・・・（６４）
Ｚｊ＝Ｚｊ−１×ｃｏｓ（ｆｊ）　　　　　・・・（６５）
（ｊ＝Ｎ，Ｎ＋１，…，Ｍ−１，Ｍ（Ｍ≧Ｎ）、初期値：ｘＮ−１＝１、ｙＮ−１＝０、ＺＮ−１＝１）
上記の式（６３）〜式（６５）で求められたｘＭ、ｙＭおよびＺＭから下記の式（６６）および式（６７）により余弦値ＸＭ、正弦値ＹＭ　を計算する
ことを特徴とする演算方法である。
【００４１】
ＸＭ＝ｘＭ×ＺＭ　　　・・・（６６）
ＹＭ＝ｙＭ×ＺＭ　　　・・・（６７）
【００４２】
請求項８の発明は、
双曲線関数の正弦値と余弦値とを演算する演算方法において、
下記の式（６８）および式（６９）に示すように、余弦値をＸＭとし、正弦値をＹＭとし、引数を級数の和で表現する。
【００４３】
【数２４】
2004126872.tif 000010
【数２５】
2004126872.tif 000011
Ｚｊ＝ｃｏｓｈ（ｆｊ）×Ｚｊ−１、Ｘｊ＝ｘｊ×Ｚｊ、Ｙｊ＝ｙｊ×Ｚｊと置き、双曲線関数の加法定理により上記の式（６８）および式（６９）をそれぞれ変形した下記の式（７０）および式（７１）と、式（７２）とからなる漸化式をそれぞれ反復計算する。
【００４４】
ｘｊ＝ｘｊ−１＋ｔａｎｈ（ｆｊ）×ｙｊ−１　　　・・・（７０）
ｙｊ＝ｙｊ−１＋ｔａｎｈ（ｆｊ）×ｘｊ−１　　　・・・（７１）
Ｚｊ＝Ｚｊ−１×ｃｏｓｈ（ｆｊ）　　　　　・・・（７２）
（ｊ＝Ｎ，Ｎ＋１，…，Ｍ−１，Ｍ（Ｍ≧Ｎ）、初期値：ｘＮ−１＝１、ｙＮ−１＝０、ＺＮ−１＝１）
上記の式（７０）〜式（７２）で求められたｘＭ、ｙＭおよびＺＭから下記の式（７３）および式（７４）により余弦値ＸＭ、正弦値ＹＭ　を計算する
ことを特徴とする演算方法である。
【００４５】
ＸＭ＝ｘＭ×ＺＭ　　　・・・（７３）
ＹＭ＝ｙＭ×ＺＭ　　　・・・（７４）
【００４６】
この発明では、三角関数や双曲線関数等の引数を級数の和に展開し、加法定理を利用して除算、平方根計算を含まない形に変形した漸化式を反復計算することで、関数値の計算を行う。このため、計算回路等のコストをかけずに三角関数や双曲線関数等の関数の計算を高速に行うことができる。
【００４７】
【発明の実施形態】
まず、この発明の実施形態による三角関数および双曲線関数等の計算アルゴリズムについて説明する。三角関数の引数部を級数の和（以後、以下のように書く）で表す。
【００４８】
【数２６】
2004126872.tif 000012
【００４９】
これにより、三角関数の加法定理が利用出来るようになり、数学的に厳密な三角関数の計算法を導出することが出来る。
【００５０】
ここで、下記に示すθを引数とする三角関数について考察する。
【００５１】
【数２７】
2004126872.tif 000013
【００５２】
これにより、以下の様に関数が定義される。
【００５３】
【数２８】
2004126872.tif 000014
【００５４】
したがって、三角関数の加法定理から次の様な関係が成り立つ。
【００５５】
【数２９】
2004126872.tif 000015
【００５６】
ここで、Ｘｊ　＝　ｘｊ・Ｚｊ　、Ｙｊ　＝　ｙｊ・Ｚｊ　、Ｚｊ　＝　ｃｏｓ（ｆｊ）・Ｚｊ−１　と置き、Ｘｊ、Ｙｊ　をＺｊで割ると、三角関数は次の関係を満たす。
【００５７】
ｘｊ　＝　ｘｊ−１−ｔａｎ（ｆｊ）・ｙｊ−１
ｙｊ　＝　ｙｊ−１＋ｔａｎ（ｆｊ）・ｘｊ−１
Ｚｊ　＝　Ｚｊ−１・ｃｏｓ（ｆｊ）
ｊ＝Ｎ、Ｎ＋１、…、Ｍ−１、Ｍ（Ｎ≦Ｍ）
【００５８】
そして、下記の式を満たすθを基に、ｃｏｓ（θ）、ｓｉｎ（θ）を計算する場合、ｘＮ−１＝　１、ｙＮ−１　＝　０、ＺＮ−１　＝　１　を初期値として、漸化式を反復計算し、ｘＭ、ｙＭ、ＺＭ　を求め、それを基に関係式ｃｏｓ（θ）＝　ＸＭ　＝　ｘＭ・ＺＭ、ｓｉｎ（θ）＝　ＹＭ　＝　ｙＭ・ＺＭ　を使って、ｃｏｓ（θ）、ｓｉｎ（θ）を求めればよい。
【００５９】
【数３０】
2004126872.tif 000016
【００６０】
双曲線関数も同様に、加法定理を利用すると、次の漸化式を満たすのが判る。
【００６１】
ｘｊ　＝　ｘｊ−１＋ｔａｎｈ（ｆｊ）・ｙｊ−１
ｙｊ　＝　ｙｊ−１＋ｔａｎｈ（ｆｊ）・ｘｊ−１
Ｚｊ　＝　Ｚｊ−１・ｃｏｓｈ（ｆｊ）
ｊ＝Ｎ、Ｎ＋１、…、Ｍ−１、Ｍ（Ｎ≦Ｍ）
【００６２】
そして、下記の式を満たすθを基に、ｃｏｓｈ（θ）、ｓｉｎｈ（θ）を計算する場合、ｘＮ−１　＝　１、ｙＮ−１　＝　０、ＺＮ−１　＝　１　を初期値として、漸化式を反復計算し、ｘＭ、ｙＭ、ＺＭを求め、それを基に関係式ｃｏｓｈ（θ）＝　ｘＭ・ＺＭ、ｓｉｎｈ（θ）＝　ｙＭ・ＺＭ　を使って、ｃｏｓｈ（θ）、ｓｉｎｈ（θ）を求めればよい。
【００６３】
【数３１】
2004126872.tif 000017
【００６４】
第１の実施形態
以下に、ｆｉ　＝　ｑｉ・２ｉ（ｑｉ　＝　０，１）と置いた時の、三角関数の計算法について説明する。通常計算機上では、数字は２進数で表現される。よって、以下の式は、三角関数の引数θを２進数で表現した事と一致する。（ｑｉ　がビット値に相当する。）
【００６５】
【数３２】
2004126872.tif 000018
【００６６】
この場合、漸化式、漸化式の初期値は次の様に書ける。
【００６７】
ｘｊ　＝　ｘｊ−１−ｔａｎ（ｑｊ・２ｊ）・ｙｊ−１　＝　ｘｊ−１−ｑｊ・ｔａｎ（２ｊ）・ｙｊ−１
ｙｊ　＝　ｙｊ−１＋ｔａｎ（ｑｊ・２ｊ）・ｘｊ−１　＝　ｙｊ−１＋ｑｊ・ｔａｎ（２ｊ）・ｘｊ−１
Ｚｊ　＝　Ｚｊ−１・ｃｏｓ（ｑｊ・２ｊ）　＝　Ｚｊ−１［（１−ｑｊ）＋ｑｊ・ｃｏｓ（２ｊ）］
ｊ＝Ｎ、Ｎ＋１、…、Ｍ−１、Ｍ（Ｍ≧Ｎ）
【００６８】
ｘＮ−１　＝　１
ｙＮ−１　＝　０
ＺＮ−１　＝　１
【００６９】
ｃｏｓ（θ）　＝　ｘＭ・ＺＭ
ｓｉｎ（θ）　＝　ｙＭ・ＺＭ
【００７０】
さらに、θの各桁のビット値で場合分けを行うと、漸化式は次の様に書きなおせる。
【００７１】
ｑｊ　＝　０　の場合、以下のようになる。
【００７２】
ｘｊ　＝　ｘｊ−１
ｙｊ　＝　ｙｊ−１
Ｚｊ　＝　Ｚｊ−１
【００７３】
ｑｊ　＝　１　の場合、以下のようになる。
【００７４】
ｘｊ　＝　ｘｊ−１−ｔａｎ（２ｊ）・ｙｊ−１
ｙｊ　＝　ｙｊ−１＋ｔａｎ（２ｊ）・ｘｊ−１
Ｚｊ　＝　Ｚｊ−１・ｃｏｓ（２ｊ）
【００７５】
以上を踏まえ、Ｘ　＝　ｘｊ、Ｙ　＝　ｙｊ、Ｚ　＝　Ｚｊ　として、２進数で表された以下に示すθを引数とする三角関数を計算する場合のアルゴリズムの一例を図１に示す。
【００７６】
【数３３】
2004126872.tif 000019
【００７７】
簡単の為、読み出しを行っているビット位置のインデックスを変数Ｉとして説明を行う。最下位桁（Ｉ＝Ｎ）の場合、初期値として、Ｉ＝Ｎ−１、Ｘ＝１、Ｚ＝１、Ｙ＝０　を代入する（ステップＳ１）。次に、Ｉ＝Ｍ　であるか否かが判定される（ステップＳ２）。ステップＳ２において、「Ｙｅｓ」すなわち、Ｉ＝Ｍ　であると判定された場合には、ステップＳ６に進む。ステップＳ２において、「Ｎｏ」すなわち、Ｉ＝Ｍ　でないと判定された場合には、ステップＳ３に進む。
【００７８】
ステップＳ３では、変数Ｉをインクリメント、すなわち、Ｉ＝Ｉ＋１　とし、続いてｑＩ　の値を読み出し、ｑＩ　＝　１　であるか否かが判定される（ステップＳ４）。ステップＳ４において、「Ｎｏ」すなわち、ｑＩ　＝　１　でない（ｑＩ　＝　０　）と判定された場合には、ステップＳ２に戻る。ステップＳ４において、「Ｙｅｓ」すなわち、ｑＩ　＝　１　であると判定された場合には、ステップＳ５に進む。ステップＳ５では、以下の計算を行い、Ｘ、Ｙ、Ｚの値を逐次更新する。（Ｗは一時的にＸの更新値を格納する変数）
【００７９】
Ｗ　＝　Ｘ−ｔａｎ（２Ｉ）・Ｙ
Ｙ　＝　Ｙ＋ｔａｎ（２Ｉ）・Ｘ
Ｘ　＝　Ｗ
Ｚ　＝　Ｚ・ｃｏｓ（２Ｉ）
【００８０】
ステップＳ５においてＸ、Ｙ、Ｚの値を更新後、ステップＳ２に戻る。
【００８１】
ステップＳ６では、最終的に求まるＸ、Ｙ、Ｚから、下記の式を使いｃｏｓ（θ）、ｓｉｎ（θ）を計算する。
【００８２】
ｃｏｓ（θ）　＝　Ｘ・Ｚ
ｓｉｎ（θ）　＝　Ｙ・Ｚ
【００８３】
必要に応じて、ｔａｎ（θ）等のｓｉｎ（θ）　、ｃｏｓ（θ）の関数は、ステップＳ１〜ステップＳ６で求まったｓｉｎ（θ）　、ｃｏｓ（θ）から計算する。
【００８４】
本アルゴリズムを用いると、従来の２進数の引数を用いて漸化式を解くアルゴリズムに比べ、引数の非ゼロビット桁の反復計算で行われる乗算がおよそ２５％削減でき、計算の高速化が実現できる。
【００８５】
第２の実施形態
以下に、ｆｉ　＝　ｑｉ・２ｉ（ｑｉ　＝　０，１）と置いた時の、双曲線関数の計算法について説明する。通常計算機上では、数字は２進数で表現される。よって、以下の式は、双曲線関数の引数を２進数で表現した事と一致する。（ｑｉ　がビット値に相当する。）
【００８６】
【数３４】
2004126872.tif 000020
【００８７】
この場合、漸化式、漸化式の初期値は次の様に書ける。
【００８８】
ｘｊ　＝　ｘｊ−１＋ｔａｎｈ（ｑｊ・２ｊ）・ｙｊ−１　＝　ｘｊ−１＋ｑｊ・ｔａｎｈ（２ｊ）・ｙｊ−１
ｙｊ　＝　ｙｊ−１＋ｔａｎｈ（ｑｊ・２ｊ）・ｘｊ−１　＝　ｙｊ−１＋ｑｊ・ｔａｎｈ（２ｊ）・ｘｊ−１
Ｚｊ　＝　Ｚｊ−１・ｃｏｓｈ（ｑｊ・２ｊ）　＝　Ｚｊ−１［（１−ｑｊ）＋ｑｊ・ｃｏｓｈ（２ｊ）］
ｊ＝Ｎ、Ｎ＋１、…、Ｍ−１、Ｍ（Ｍ≧Ｎ）
【００８９】
ｘＮ−１　＝　１
ｙＮ−１　＝　０
ＺＮ−１　＝　１
【００９０】
ｃｏｓｈ（θ）　＝　ｘＭ・ＺＭ
ｓｉｎｈ（θ）　＝　ｙＭ・ＺＭ
【００９１】
さらに、θの各桁のビット値で場合分けを行うと、漸化式は次の様に書きなおせる。
【００９２】
ｑｊ　＝　０　の場合、以下のようになる。
【００９３】
ｘｊ　＝　ｘｊ−１
ｙｊ　＝　ｙｊ−１
Ｚｊ　＝　Ｚｊ−１
【００９４】
ｑｊ　＝　１　の場合、以下のようになる。
【００９５】
ｘｊ　＝　ｘｊ−１＋ｔａｎｈ（２ｊ）・ｙｊ−１
ｙｊ　＝　ｙｊ−１＋ｔａｎｈ（２ｊ）・ｘｊ−１
Ｚｊ　＝　Ｚｊ−１・ｃｏｓｈ（２ｊ）
【００９６】
以上を踏まえ、Ｘ　＝　ｘｊ、Ｙ　＝　ｙｊ、Ｚ　＝　Ｚｊ　として、２進数で表された以下に示すθを引数とする双曲線関数を計算する場合のアルゴリズムの一例を図２に示す。
【００９７】
【数３５】
2004126872.tif 000021
【００９８】
変数Ｉは、読み出しを行っているビット位置のインデックスである。最下位桁がＩ＝Ｎ　の場合、初期値として、Ｉ＝Ｎ−１、Ｘ＝１、Ｚ＝１、Ｙ＝０　を代入する（ステップＳ７）。次に、Ｉ＝Ｍ　であるか否かが判定される（ステップＳ８）。ステップＳ８において、「Ｙｅｓ」すなわち、Ｉ＝Ｍ　であると判定された場合には、ステップＳ１２に進む。ステップＳ８において、「Ｎｏ」すなわち、Ｉ＝Ｍ　でないと判定された場合には、ステップＳ９に進む。
【００９９】
ステップＳ９では、変数Ｉをインクリメント、すなわち、Ｉ＝Ｉ＋１　とし、続いてｑＩ　の値を読み出し、ｑＩ　＝　１　であるか否かが判定される（ステップＳ１０）。ステップＳ１０において、「Ｎｏ」すなわち、ｑＩ　＝　１　でない（ｑＩ　＝　０　）と判定された場合には、ステップＳ８に戻る。ステップＳ１０において、「Ｙｅｓ」すなわち、ｑＩ　＝　１　であると判定された場合には、ステップＳ１１に進む。ステップＳ１１では、以下の計算を行い、Ｘ、Ｙ、Ｚの値を逐次更新する。（Ｗは一時的にＸの更新値を格納する変数）
【０１００】
Ｗ　＝　Ｘ＋ｔａｎｈ（２Ｉ）・Ｙ
Ｙ　＝　Ｙ＋ｔａｎｈ（２Ｉ）・Ｘ
Ｘ　＝　Ｗ
Ｚ　＝　Ｚ・ｃｏｓｈ（２Ｉ）
【０１０１】
ステップＳ１１においてＸ、Ｙ、Ｚの値を更新後、ステップＳ８に戻る。
【０１０２】
ステップＳ１２では、最終的に求まるＸ、Ｙ、Ｚから、下記の式を使いｃｏｓｈ（θ）、ｓｉｎｈ（θ）を計算する。
【０１０３】
ｃｏｓｈ（θ）　＝　Ｘ・Ｚ
ｓｉｎｈ（θ）　＝　Ｙ・Ｚ
【０１０４】
必要に応じて、ｔａｎｈ（θ）等のｓｉｎｈ（θ）　、ｃｏｓｈ（θ）の関数は、ステップＳ７〜ステップＳ１２で求まったｓｉｎｈ（θ）　、ｃｏｓｈ（θ）から計算する。
【０１０５】
本アルゴリズムを用いると、従来の２進数の引数を用いて漸化式を解くアルゴリズムに比べ、引数の非ゼロビット桁の反復計算で行われる乗算がおよそ２５％削減でき、計算の高速化が実現できる。
【０１０６】
第３の実施形態
近年のコンピュータに積載されるＭＰＵ（ＭｉｃｒｏＰｒｏｃｅｓｓｉｎｇ　Ｕｎｉｔ）は、計算を流れ作業的に実行する為の深いパイプラインを持つ。これらのＭＰＵは、流れ作業の中にプログラムの条件分岐が含まれる場合、それ以降の命令を破棄する必要が出てくる為、計算効率が低下してしまう。通常はこれを回避する為、予め分岐予測を行って、情報分岐後の計算も流れ作業で計算してしまうが、分岐予測が外れた場合、ペナルティが発生し、結果として計算が遅くなるという問題が発生する。
【０１０７】
三角関数の引数のビット値による条件分岐を行うアルゴリズムを採用した場合、引数の各桁のビット値は完全に同じ確率で「０」又は「１」の値をとり、ビット値の表れ方もランダムであると考えられる為、ビット値による条件分岐を含まない事が望ましい。
【０１０８】
以上を踏まえ、Ｘ　＝　ｘｊ、Ｙ　＝　ｙｊ、Ｚ　＝　Ｚｊ　として、２進数で表された以下に示すθを引数とする三角関数を計算する場合のアルゴリズムの一例を図３に示す。
【０１０９】
【数３６】
2004126872.tif 000022
【０１１０】
変数Ｉは、読み出しを行っているビット位置のインデックスである。最下位桁がＩ＝Ｎ　の場合、初期値として、Ｉ＝Ｎ−１、Ｘ＝１、Ｚ＝１、Ｙ＝０　を代入する（ステップＳ１３）。次に、Ｉ＝Ｍ　であるか否かが判定される（ステップＳ１４）。ステップ１４において、「Ｙｅｓ」すなわち、Ｉ＝Ｍ　であると判定された場合には、ステップＳ１７に進む。ステップＳ１４において、「Ｎｏ」すなわち、Ｉ＝Ｍ　でないと判定された場合には、ステップＳ１５に進む。
【０１１１】
ステップＳ１５では、変数Ｉをインクリメント、すなわち、Ｉ＝Ｉ＋１　とし、ｑＩ　の値を読み出す。次に、ステップＳ１６において、以下の計算をそれぞれ行い、Ｘ、Ｙ、Ｚの値を逐次更新する。（Ｗは一時的にＸの更新値を格納する変数）
【０１１２】
Ｗ　＝　Ｘ−ｑＩ・ｔａｎ（２Ｉ）・Ｙ
Ｙ　＝　Ｙ＋ｑＩ・ｔａｎ（２Ｉ）・Ｘ
Ｚ　＝　Ｚ［（１−ｑＩ）＋ｑＩ・ｃｏｓ（２Ｉ）］
Ｘ　＝　Ｗ
【０１１３】
ステップＳ３０においてＸ、Ｙ、Ｚの値を更新後、ステップＳ１４に戻る。
【０１１４】
ステップＳ１７では、最終的に求まるＸ、Ｙ、Ｚから、下記の式を使いｃｏｓ（θ）、ｓｉｎ（θ）を計算する。
【０１１５】
ｃｏｓ（θ）　＝　Ｘ・Ｚ
ｓｉｎ（θ）　＝　Ｙ・Ｚ
【０１１６】
必要に応じて、ｔａｎ（θ）等のｓｉｎ（θ）　、ｃｏｓ（θ）の関数は、ステップＳ１３〜ステップＳ１７で求まったｓｉｎ（θ）　、ｃｏｓ（θ）から計算する。
【０１１７】
本アルゴリズムを用いると、従来の２進数の引数を用いて漸化式を解くアルゴリズムに比べ、引数の非ゼロビット桁の反復計算で行われる乗算がおよそ２５％削減でき、計算の高速化が実現できる。
【０１１８】
また、計算の過程で条件分岐を含まない為（ステップＳ１４における条件分岐の実体は、反復ループ計算なので、パイプラインの分岐予測エラーによるペナルティにはかからない）、条件予測付きパイプラインを含むＭＰＵで分岐予測エラーを伴うことなく、計算を実行することができる。
【０１１９】
第４の実施形態
以下に、情報分岐を含まずに双曲線関数を計算するアルゴリズムについて示す。Ｘ　＝　ｘｊ、Ｙ　＝　ｙｊ、Ｚ　＝　Ｚｊ　として、２進数で表された以下に示すθを引数とする双曲線関数を計算する場合のアルゴリズムの一例を図４に示す。
【０１２０】
【数３７】
2004126872.tif 000023
【０１２１】
簡単の為、読み出しを行っているビット位置のインデックスを変数Ｉとして説明を行う。最下位桁がＩ＝Ｎ　の場合、初期値として、Ｉ＝Ｎ−１、Ｘ＝１、Ｚ＝１、Ｙ＝０　を代入する（ステップＳ１８）。次に、Ｉ＝Ｍ　であるか否かが判定される（ステップＳ１９）。ステップ１９において、「Ｙｅｓ」すなわち、Ｉ＝Ｍ　であると判定された場合には、ステップＳ２２に進む。ステップＳ１９において、「Ｎｏ」すなわち、Ｉ＝Ｍ　でないと判定された場合には、ステップＳ２０に進む。
【０１２２】
ステップＳ２０では、変数Ｉをインクリメント、すなわち、Ｉ＝Ｉ＋１　とし、ｑＩ　の値を読み出す。次に、ステップＳ２１において、以下の計算をそれぞれ行い、Ｘ、Ｙ、Ｚの値を逐次更新する。（Ｗは一時的にＸの更新値を格納する変数）
【０１２３】
Ｗ　＝　Ｘ＋ｑＩ・ｔａｎｈ（２Ｉ）・Ｙ
Ｙ　＝　Ｙ＋ｑＩ・ｔａｎｈ（２Ｉ）・Ｘ
Ｚ　＝　Ｚ［（１−ｑＩ）＋ｑＩ・ｃｏｓｈ（２Ｉ）］
Ｘ　＝　Ｗ
【０１２４】
ステップＳ２１においてＸ、Ｙ、Ｚの値を更新後、ステップＳ１９に戻る。
【０１２５】
ステップＳ２２では、最終的に求まるＸ、Ｙ、Ｚから、下記の式を使いｃｏｓｈ（θ）、ｓｉｎｈ（θ）を計算する。
【０１２６】
ｃｏｓｈ（θ）　＝　Ｘ・Ｚ
ｓｉｎｈ（θ）　＝　Ｙ・Ｚ
【０１２７】
必要に応じて、ｔａｎｈ（θ）等のｓｉｎｈ（θ）　、ｃｏｓｈ（θ）の関数は、ステップＳ１８〜ステップＳ２２で求まったｓｉｎｈ（θ）　、ｃｏｓｈ（θ）から計算する。
【０１２８】
本アルゴリズムを用いると、従来の２進数の引数を用いて漸化式を解くアルゴリズムに比べ、引数の非ゼロビット桁の反復計算で行われる乗算がおよそ２５％削減でき、計算の高速化が実現できる。
【０１２９】
また、計算の過程で条件分岐を含まない為（ステップＳ１９における条件分岐の実体は、反復ループ計算なので、パイプラインの分岐予測エラーによるペナルティにはかからない）、条件予測付きパイプラインを含むＭＰＵで分岐予測エラーを伴うことなく、計算を実行することができる。
【０１３０】
第５の実施形態
第１の実施形態では、三角関数の引数が単純に２進数で表される場合のアルゴリズムについて説明したが、計算機の中では暫し、数字を０，１のビットの代わりに、冗長性を持った、−１、０、１の組み合わせで表す事がある。例えば、２進数で０１１１１という数は、１００００−００００１に等価である為、１０００−１と最下位ビットが−１の形で書ける。
【０１３１】
以下に、ｆｉ　＝　ｑｉ・２ｉ（ｑｉ　＝　０，±１）と置いた時の、三角関数の計算法について説明する。通常計算機上では、数字は２進数で表現される。よって、以下の式は、三角関数の引数を２進数で表現した事と一致する。（ｑｉ　がビット値に相当する。）
【０１３２】
【数３８】
2004126872.tif 000024
【０１３３】
この場合、漸化式、漸化式の初期値は次の様に書ける。
【０１３４】
ｘｊ　＝　ｘｊ−１−ｔａｎ（ｑｊ・２ｊ）・ｙｊ−１　＝　ｘｊ−１−ｑｊ・ｔａｎ（２ｊ）・ｙｊ−１
ｙｊ　＝　ｙｊ−１＋ｔａｎ（ｑｊ・２ｊ）・ｘｊ−１　＝　ｙｊ−１＋ｑｊ・ｔａｎ（２ｊ）・ｘｊ−１
Ｚｊ　＝　Ｚｊ−１・ｃｏｓ（ｑｊ・２ｊ）　＝　Ｚｊ−１［（１−ｑｊ２）＋ｑｊ２・ｃｏｓ（２ｊ）］
ｊ＝Ｎ、Ｎ＋１、…、Ｍ−１、Ｍ（Ｍ≧Ｎ）
【０１３５】
ｘＮ−１　＝　１
ｙＮ−１　＝　０
ＺＮ−１　＝　１
【０１３６】
ｃｏｓ（θ）　＝　ｘＭ・ＺＭ
ｓｉｎ（θ）　＝　ｙＭ・ＺＭ
【０１３７】
さらに、θの各桁のビット値で場合分けを行うと、漸化式は次の様に書きなおせる。
【０１３８】
ｑｊ　＝　０　の場合、以下のようになる。
【０１３９】
ｘｊ　＝　ｘｊ−１
ｙｊ　＝　ｙｊ−１
Ｚｊ　＝　Ｚｊ−１
【０１４０】
ｑｊ　＝　１　の場合、以下のようになる。
【０１４１】
ｘｊ　＝　ｘｊ−１−ｔａｎ（２ｊ）・ｙｊ−１
ｙｊ　＝　ｙｊ−１＋ｔａｎ（２ｊ）・ｘｊ−１
Ｚｊ　＝　Ｚｊ−１・ｃｏｓ（２ｊ）
【０１４２】
ｑｊ　＝　−１　の場合、以下のようになる。
【０１４３】
ｘｊ　＝　ｘｊ−１＋ｔａｎ（２ｊ）・ｙｊ−１
ｙｊ　＝　ｙｊ−１−ｔａｎ（２ｊ）・ｘｊ−１
Ｚｊ　＝　Ｚｊ−１・ｃｏｓ（２ｊ）
【０１４４】
以上を踏まえ、Ｘ　＝　ｘｊ、Ｙ　＝　ｙｊ、Ｚ　＝　Ｚｊ　として、２進数で表された以下に示すθを引数とする三角関数を計算する場合のアルゴリズムの一例を図５に示す。
【０１４５】
【数３９】
2004126872.tif 000025
【０１４６】
簡単の為、読み出しを行っているビット位置のインデックスを変数Ｉとして説明を行う。最下位桁がＩ＝Ｎ　の場合、初期値として、Ｉ＝Ｎ−１、Ｘ＝１、Ｚ＝１、Ｙ＝０　を代入する（ステップＳ２３）。次に、Ｉ＝Ｍ　であるか否かが判定される（ステップＳ２４）。ステップ２４において、「Ｙｅｓ」すなわち、Ｉ＝Ｍ　であると判定された場合には、ステップＳ２９に進む。ステップＳ２４において、「Ｎｏ」すなわち、Ｉ＝Ｍ　でないと判定された場合には、ステップＳ２５に進む。
【０１４７】
ステップＳ２５では、変数Ｉをインクリメント、すなわち、Ｉ＝Ｉ＋１　とし、続いてｑＩ　の値を読み出す（ステップＳ２６）。ステップＳ２６で読み出した結果が、ｑＩ　＝　０　のときには、ステップＳ２４に戻る。
【０１４８】
ステップＳ２６で読み出した結果が、ｑＩ　＝　１　のときには、ステップＳ２７に進む。ステップＳ２７では、以下の計算をそれぞれ行い、Ｘ、Ｙ、Ｚの値を逐次更新する。（Ｗは一時的にＸの更新値を格納する変数）
【０１４９】
Ｗ　＝　Ｘ−ｔａｎ（２Ｉ）・Ｙ
Ｙ　＝　Ｙ＋ｔａｎ（２Ｉ）・Ｘ
Ｘ　＝　Ｗ
Ｚ　＝　Ｚ・ｃｏｓ（２Ｉ）
【０１５０】
ステップＳ２７においてＸ、Ｙ、Ｚの値を更新後、ステップＳ２４に戻る。
【０１５１】
ステップＳ２６で読み出した結果が、ｑＩ　＝　−１　のときには、ステップＳ２８に進む。ステップＳ２８では、以下の計算をそれぞれ行い、Ｘ、Ｙ、Ｚの値を逐次更新する。（Ｗは一時的にＸの更新値を格納する変数）
【０１５２】
Ｗ　＝　Ｘ＋ｔａｎ（２Ｉ）・Ｙ
Ｙ　＝　Ｙ−ｔａｎ（２Ｉ）・Ｘ
Ｘ　＝　Ｗ
Ｚ　＝　Ｚ・ｃｏｓ（２Ｉ）
【０１５３】
ステップＳ２８においてＸ、Ｙ、Ｚの値を更新後、ステップＳ２４に戻る。
【０１５４】
ステップＳ２９では、最終的に求まるＸ、Ｙ、Ｚから、下記の式を使いｃｏｓ（θ）、ｓｉｎ（θ）を計算する。
【０１５５】
ｃｏｓ（θ）　＝　Ｘ・Ｚ
ｓｉｎ（θ）　＝　Ｙ・Ｚ
【０１５６】
必要に応じて、ｔａｎ（θ）等のｓｉｎ（θ）　、ｃｏｓ（θ）の関数は、ステップＳ２３〜ステップＳ２９で求まったｓｉｎ（θ）　、ｃｏｓ（θ）から計算する。
【０１５７】
本アルゴリズムを用いると、従来の２進数の引数を用いて漸化式を解くアルゴリズムに比べ、引数の非ゼロビット桁の反復計算で行われる乗算がおよそ２５％削減でき、計算の高速化が実現できる。
【０１５８】
更に、冗長表現では、通常の２進数表現に比べ、ビット値がゼロになる桁数が多くなる為、第１の実施形態よりも漸化式を解く反復回数が少なくなり、高速化が可能である。
【０１５９】
第６の実施形態
第２の実施形態では、双曲線関数の引数が単純に２進数で表される場合のアルゴリズムについて説明したが、計算機の中では暫し、数字を０，１のビットの代わりに、冗長性を持った、−１、０、１の組み合わせで表す事がある。例えば、２進数で０１１１１という数は、１００００−００００１に等価である為、１０００−１と最下位ビットが−１の形で書ける。
【０１６０】
以下に、ｆｉ　＝　ｑｉ・２ｉ（ｑｉ　＝　０，±１）と置いた時の、双曲線関数の計算法について説明する。通常計算機上では、数字は２進数で表現される。よって、以下の式は、双曲線関数の引数を２進数で表現した事と一致する。（ｑｉ　がビット値に相当する。）
【０１６１】
【数４０】
2004126872.tif 000026
【０１６２】
この場合、漸化式、漸化式の初期値は次の様に書ける。
【０１６３】
ｘｊ　＝　ｘｊ−１＋ｔａｎｈ（ｑｊ・２ｊ）・ｙｊ−１　＝　ｘｊ−１＋ｑｊ・ｔａｎｈ（２ｊ）・ｙｊ−１
ｙｊ　＝　ｙｊ−１＋ｔａｎｈ（ｑｊ・２ｊ）・ｘｊ−１　＝　ｙｊ−１＋ｑｊ・ｔａｎｈ（２ｊ）・ｘｊ−１Ｚｊ　＝　Ｚｊ−１・ｃｏｓｈ（ｑｊ・２ｊ）　＝　Ｚｊ−１［（１−ｑｊ２）＋ｑｊ２・ｃｏｓｈ（２ｊ）］ｊ＝Ｎ、Ｎ＋１、…、Ｍ−１、Ｍ（Ｍ≧Ｎ）
【０１６４】
ｘＮ−１　＝　１
ｙＮ−１　＝　０
ＺＮ−１　＝　１
【０１６５】
ｃｏｓｈ（θ）　＝　ｘＭ・ＺＭ
ｓｉｎｈ（θ）　＝　ｙＭ・ＺＭ
【０１６６】
さらに、θの各桁のビット値で場合分けを行うと、漸化式は次の様に書きなおせる。
【０１６７】
ｑｊ　＝　０　の場合、以下のようになる。
【０１６８】
ｘｊ　＝　ｘｊ−１
ｙｊ　＝　ｙｊ−１
Ｚｊ　＝　Ｚｊ−１
【０１６９】
ｑｊ　＝　１　の場合、以下のようになる。
【０１７０】
ｘｊ　＝　ｘｊ−１＋ｔａｎｈ（２ｊ）・ｙｊ−１
ｙｊ　＝　ｙｊ−１＋ｔａｎｈ（２ｊ）・ｘｊ−１
Ｚｊ　＝　Ｚｊ−１・ｃｏｓｈ（２ｊ）
【０１７１】
ｑｊ　＝　−１　の場合、以下のようになる。
【０１７２】
ｘｊ　＝　ｘｊ−１−ｔａｎｈ（２ｊ）・ｙｊ−１
ｙｊ　＝　ｙｊ−１−ｔａｎｈ（２ｊ）・ｘｊ−１
Ｚｊ　＝　Ｚｊ−１・ｃｏｓｈ（２ｊ）
【０１７３】
以上を踏まえ、Ｘ　＝　ｘｊ、Ｙ　＝　ｙｊ、Ｚ　＝　Ｚｊ　として、２進数で表された以下に示すθを引数とする双曲線関数を計算する場合のアルゴリズムの一例を図６に示す。
【０１７４】
【数４１】
2004126872.tif 000027
【０１７５】
簡単の為、読み出しを行っているビット位置のインデックスを変数Ｉとして説明を行う。最下位桁がＩ＝Ｎ　の場合、初期値として、Ｉ＝Ｎ−１、Ｘ＝１、Ｚ＝１、Ｙ＝０　を代入する（ステップＳ３０）。次に、Ｉ＝Ｍ　であるか否かが判定される（ステップＳ３１）。ステップ３１において、「Ｙｅｓ」すなわち、Ｉ＝Ｍ　であると判定された場合には、ステップＳ３６に進む。ステップＳ３１において、「Ｎｏ」すなわち、Ｉ＝Ｍ　でないと判定された場合には、ステップＳ３２に進む。
【０１７６】
ステップＳ３２では、変数Ｉをインクリメント、すなわち、Ｉ＝Ｉ＋１　とし、続いてｑＩ　の値を読み出す（ステップＳ３３）。ステップＳ３３で読み出した結果が、ｑＩ　＝　０　のときには、ステップＳ３１に戻る。
【０１７７】
ステップＳ３３で読み出した結果が、ｑＩ　＝　１　のときには、ステップＳ３４に進む。ステップＳ３４では、以下の計算をそれぞれ行い、Ｘ、Ｙ、Ｚの値を逐次更新する。（Ｗは一時的にＸの更新値を格納する変数）
【０１７８】
Ｗ　＝　Ｘ＋ｔａｎｈ（２Ｉ）・Ｙ
Ｙ　＝　Ｙ＋ｔａｎｈ（２Ｉ）・Ｘ
Ｘ　＝　Ｗ
Ｚ　＝　Ｚ・ｃｏｓｈ（２Ｉ）
【０１７９】
ステップＳ３４においてＸ、Ｙ、Ｚの値を更新後、ステップＳ３１に戻る。
【０１８０】
ステップＳ３３で読み出した結果が、ｑＩ　＝　−１　のときには、ステップＳ３５に進む。ステップＳ３５では、以下の計算をそれぞれ行い、Ｘ、Ｙ、Ｚの値を逐次更新する。（Ｗは一時的にＸの更新値を格納する変数）
【０１８１】
Ｗ　＝　Ｘ−ｔａｎｈ（２Ｉ）・Ｙ
Ｙ　＝　Ｙ−ｔａｎｈ（２Ｉ）・Ｘ
Ｘ　＝　Ｗ
Ｚ　＝　Ｚ・ｃｏｓｈ（２Ｉ）
【０１８２】
ステップＳ３５においてＸ、Ｙ、Ｚの値を更新後、ステップＳ３４に戻る。
【０１８３】
ステップＳ３６では、最終的に求まるＸ、Ｙ、Ｚから、下記の式を使いｃｏｓｈ（θ）、ｓｉｎｈ（θ）を計算する。
【０１８４】
ｃｏｓｈ（θ）　＝　Ｘ・Ｚ
ｓｉｎｈ（θ）　＝　Ｙ・Ｚ
【０１８５】
必要に応じて、ｔａｎｈ（θ）等のｓｉｎｈ（θ）　、ｃｏｓｈ（θ）の関数は、ステップＳ３０〜ステップＳ３６で求まったｓｉｎｈ（θ）　、ｃｏｓｈ（θ）から計算する。
【０１８６】
本アルゴリズムを用いると、従来の２進数の引数を用いて漸化式を解くアルゴリズムに比べ、引数の非ゼロビット桁の反復計算で行われる乗算がおよそ２５％削減でき、計算の高速化が実現できる。
【０１８７】
更に、冗長表現では、通常の２進数表現に比べ、ビット値がゼロになる桁数が多くなる為、第２の実施形態よりも漸化式を解く反復回数が少なくなり、高速化が可能である。
【０１８８】
第７の実施形態
以下に、ｆｉ　＝　ｑｉ・２ｉ（ｑｉ　＝　０，±１）と置いた時の、条件分岐のない三角関数の計算法について説明する。通常計算機上では、数字は２進数で表現される。よって、以下の式は、三角関数の引数を２進数で表現した事と一致する。（ｑｉ　がビット値に相当する。）
【０１８９】
【数４２】
2004126872.tif 000028
【０１９０】
この場合、漸化式、漸化式の初期値は次の様に書ける。
【０１９１】
ｘｊ　＝　ｘｊ−１−ｔａｎ（ｑｊ・２ｊ）・ｙｊ−１　＝　ｘｊ−１−ｑｊ・ｔａｎ（２ｊ）・ｙｊ−１
ｙｊ　＝　ｙｊ−１＋ｔａｎ（ｑｊ・２ｊ）・ｘｊ−１　＝　ｙｊ−１＋ｑｊ・ｔａｎ（２ｊ）・ｘｊ−１
Ｚｊ　＝　Ｚｊ−１・ｃｏｓ（ｑｊ・２ｊ）　＝　Ｚｊ−１［（１−ｑｊ２）＋ｑｊ２・ｃｏｓ（２ｊ）］
ｊ＝Ｎ、Ｎ＋１、…、Ｍ−１、Ｍ（Ｍ≧Ｎ）
【０１９２】
ｘＮ−１　＝　１
ｙＮ−１　＝　０
ＺＮ−１　＝　１
【０１９３】
ｃｏｓ（θ）　＝　ｘＭ・ＺＭ
ｓｉｎ（θ）　＝　ｙＭ・ＺＭ
【０１９４】
以上を踏まえ、Ｘ　＝　ｘｊ、Ｙ　＝　ｙｊ、Ｚ　＝　Ｚｊ　として、２進数で表された以下に示すθを引数とする三角関数を計算する場合のアルゴリズムの一例を図７に示す。
【０１９５】
【数４３】
2004126872.tif 000029
【０１９６】
簡単の為、読み出しを行っているビット位置のインデックスを変数Ｉとして説明を行う。最下位桁がＩ＝Ｎ　の場合、初期値として、Ｉ＝Ｎ−１、Ｘ＝１、Ｚ＝１、Ｙ＝０　を代入する（ステップＳ３７）。次に、Ｉ＝Ｍ　であるか否かが判定される（ステップＳ３８）。ステップ３８において、「Ｙｅｓ」すなわち、Ｉ＝Ｍ　であると判定された場合には、ステップＳ４１に進む。ステップＳ３８において、「Ｎｏ」すなわち、Ｉ＝Ｍ　でないと判定された場合には、ステップＳ３９に進む。
【０１９７】
ステップＳ３９では、変数Ｉをインクリメント、すなわち、Ｉ＝Ｉ＋１　とし、ｑＩ　の値を読み出す。次に、ステップＳ４０において、以下の計算をそれぞれ行い、Ｘ、Ｙ、Ｚの値を逐次更新する。（Ｗは一時的にＸの更新値を格納する変数）
【０１９８】
Ｗ　＝　Ｘ−ｑＩ・ｔａｎ（２Ｉ）・Ｙ
Ｙ　＝　Ｙ＋ｑＩ・ｔａｎ（２Ｉ）・Ｘ
Ｘ　＝　Ｗ
Ｚ　＝　Ｚ［（１−ｑＩ２）＋ｑＩ２・ｃｏｓ（２Ｉ）］
【０１９９】
ステップＳ４０においてＸ、Ｙ、Ｚの値を更新後、ステップＳ３８に戻る。
【０２００】
ステップＳ４１では、最終的に求まるＸ、Ｙ、Ｚから、下記の式を使いｃｏｓ（θ）、ｓｉｎ（θ）を計算する。
【０２０１】
ｃｏｓ（θ）　＝　Ｘ・Ｚ
ｓｉｎ（θ）　＝　Ｙ・Ｚ
【０２０２】
必要に応じて、ｔａｎ（θ）等のｓｉｎ（θ）　、ｃｏｓ（θ）の関数は、ステップＳ３７〜ステップＳ４１で求まったｓｉｎ（θ）　、ｃｏｓ（θ）から計算する。
【０２０３】
本アルゴリズムを用いると、従来の２進数の引数を用いて漸化式を解くアルゴリズムに比べ、引数の非ゼロビット桁の反復計算で行われる乗算がおよそ２５％削減でき、計算の高速化が実現できる。
【０２０４】
更に、冗長表現では、通常の２進数表現に比べ、ビット値がゼロになる桁数が多くなる為、第１の実施形態よりも漸化式を解く反復回数が少なくなり、高速化が可能である。
【０２０５】
また、計算の過程で条件分岐を含まない為（ステップＳ３８における条件分岐の実体は、反復ループ計算なので、パイプラインの分岐予測エラーによるペナルティにはかからない）、条件予測付きパイプラインを含むＭＰＵで分岐予測エラーを伴うことなく、計算を実行することができる。
【０２０６】
第８の実施形態
以下に、ｆｉ　＝　ｑｉ・２ｉ（ｑｉ　＝　０，±１）と置いた時の、条件分岐のない双曲線関数の計算法について説明する。通常計算機上では、数字は２進数で表現される。よって、以下の式は、双曲線関数の引数を２進数で表現した事と一致する。（ｑｉ　がビット値に相当する。）
【０２０７】
【数４４】
2004126872.tif 000030
【０２０８】
この場合、漸化式、漸化式の初期値は次の様に書ける。
【０２０９】
ｘｊ　＝　ｘｊ−１＋ｔａｎｈ（ｑｊ・２ｊ）・ｙｊ−１　＝　ｘｊ−１＋ｑｊ・ｔａｎｈ（２ｊ）・ｙｊ−１
ｙｊ　＝　ｙｊ−１＋ｔａｎｈ（ｑｊ・２ｊ）・ｘｊ−１　＝　ｙｊ−１＋ｑｊ・ｔａｎｈ（２ｊ）・ｘｊ−１
Ｚｊ　＝　Ｚｊ−１・ｃｏｓｈ（ｑｊ・２ｊ）　＝　Ｚｊ−１［（１−ｑｊ２）＋ｑｊ２・ｃｏｓｈ（２ｊ）］
ｊ＝Ｎ、Ｎ＋１、…、Ｍ−１、Ｍ（Ｍ≧Ｎ）
【０２１０】
ｘＮ−１　＝　１
ｙＮ−１　＝　０
ＺＮ−１　＝　１
【０２１１】
ｃｏｓｈ（θ）　＝　ｘＭ・ＺＭ
ｓｉｎｈ（θ）　＝　ｙＭ・ＺＭ
【０２１２】
以上を踏まえ、Ｘ　＝　ｘｊ、Ｙ　＝　ｙｊ、Ｚ　＝　Ｚｊ　として、２進数で表された以下に示すθを引数とする双曲線関数を計算する場合のアルゴリズムの一例を図８に示す。
【０２１３】
【数４５】
2004126872.tif 000031
【０２１４】
簡単の為、読み出しを行っているビット位置のインデックスを変数Ｉとして説明を行う。最下位桁がＩ＝Ｎ　の場合、初期値として、Ｉ＝Ｎ−１、Ｘ＝１、Ｚ＝１、Ｙ＝０　を代入する（ステップＳ４２）。次に、Ｉ＝Ｍ　であるか否かが判定される（ステップＳ４３）。ステップ４３において、「Ｙｅｓ」すなわち、Ｉ＝Ｍ　であると判定された場合には、ステップＳ４６に進む。ステップＳ４３において、「Ｎｏ」すなわち、Ｉ＝Ｍ　でないと判定された場合には、ステップＳ４４に進む。
【０２１５】
ステップＳ４４では、変数Ｉをインクリメント、すなわち、Ｉ＝Ｉ＋１　とし、ｑＩ　の値を読み出す。次に、ステップＳ４５において、以下の計算をそれぞれ行い、Ｘ、Ｙ、Ｚの値を逐次更新する。（Ｗは一時的にＸの更新値を格納する変数）
【０２１６】
Ｗ　＝　Ｘ＋ｑＩ・ｔａｎｈ（２Ｉ）・Ｙ
Ｙ　＝　Ｙ＋ｑＩ・ｔａｎｈ（２Ｉ）・Ｘ
Ｘ　＝　Ｗ
Ｚ　＝　Ｚ［（１−ｑＩ２）＋ｑＩ２・ｃｏｓｈ（２Ｉ）］
【０２１７】
ステップＳ４５においてＸ、Ｙ、Ｚの値を更新後、ステップＳ４３に戻る。
【０２１８】
ステップＳ４６では、最終的に求まるＸ、Ｙ、Ｚから、下記の式を使いｃｏｓｈ（θ）、ｓｉｎｈ（θ）を計算する。
【０２１９】
ｃｏｓｈ（θ）　＝　Ｘ・Ｚ
ｓｉｎｈ（θ）　＝　Ｙ・Ｚ
【０２２０】
必要に応じて、ｔａｎｈ（θ）等のｓｉｎｈ（θ）　、ｃｏｓｈ（θ）の関数は、ステップＳ４２〜ステップＳ４６で求まったｓｉｎｈ（θ）　、ｃｏｓｈ（θ）から計算する。
【０２２１】
本アルゴリズムを用いると、従来の２進数の引数を用いて漸化式を解くアルゴリズムに比べ、引数の非ゼロビット桁の反復計算で行われる乗算がおよそ２５％削減でき、計算の高速化が実現できる。
【０２２２】
更に、冗長表現では、通常の２進数表現に比べ、ビット値がゼロになる桁数が多くなる為、第２の実施形態よりも漸化式を解く反復回数が少なくなり、高速化が可能である。
【０２２３】
また、計算の過程で条件分岐を含まない為（ステップＳ４３における条件分岐の実体は、反復ループ計算なので、パイプラインの分岐予測エラーによるペナルティにはかからない）、条件予測付きパイプラインを含むＭＰＵで分岐予測エラーを伴うことなく、計算を実行することができる。
【０２２４】
第９の実施形態
数式１３および数式１４の漸化式から、ｆｉ　＝　ｑｉ・ｔａｎ−１（２ｉ）（ｑｉ　＝　±１）と置いた時、漸化式は簡単になる事が予想できる。以下に、ｆｉ　＝　ｑｉ・ｔａｎ−１（２ｉ）（ｑｉ
＝　±１）と置いた時の、三角関数の計算法について説明する。
【０２２５】
一般に、ｆｉ　＝　ｑｉ・ｔａｎ−１（２ｉ）の線形結合で、三角関数の引数を表現する場合、漸化式、漸化式の初期値は次の様に書ける。
【０２２６】
ｒｊ　＝　ｒｊ−１−ｑｊ・ｔａｎ−１（２ｊ）
θｊ　＝θｊ−１＋ｑｊ・ｔａｎ−１（２ｊ）
ｘｊ　＝　ｘｊ−１−ｔａｎ（ｑｊ・ｔａｎ−１（２ｊ））・ｙｊ−１　＝　ｘｊ−１−ｑｊ・２ｊ・ｙｊ−１
ｙｊ　＝　ｙｊ−１＋ｔａｎ（ｑｊ・ｔａｎ−１（２ｊ））・ｘｊ−１　＝　ｙｊ−１＋ｑｊ・２ｊ・ｘｊ−１
Ｚｊ　＝　Ｚｊ−１・ｃｏｓ（ｑｊ・ｔａｎ−１（２ｊ））　＝　Ｚｊ−１・ｃｏｓ（ｔａｎ−１（２ｊ））
ｊ＝０，−２，…，−Ｎ（Ｎ＞０）
【０２２７】
ｒ−１　＝　θ
θ−１　＝　０
ｘ−１　＝　１
ｙ−１　＝　０
Ｚ−１　＝　１
θ　＝　θＭ
【０２２８】
ｃｏｓ（θ）　＝　ｘＭ・ＺＭ
ｓｉｎ（θ）　＝　ｙＭ・ＺＭ
【０２２９】
尚、ｑｊ　の値は、ｒｊ　の絶対値が最小になるように「１」又は「−１」から選ぶ。すなわち、θｊが近似的なθの値になる。したがって、ｑｊが「１」、「−１」の場合について、各々θｊの値を計算し、θｊ−θの絶対値が最小になるｑｊの値を「１」、「−１」の中から選ぶことにより、ｑｊの値を決定する。求めたｑｊの値から、ｘｊ、ｙｊ、Ｚｊを計算する。さらに詳しくは、θｊは、ｔａｎ−１（２ｊ）の級数和で書いたθの漸近値に相当し、ｒｊ　は、θ−θｊに相当する。θｊは、反復のたびにθの値に漸近していく。よって、ｒｊ　の絶対値が最小になるようにｑｊ　の値を決める事は、θｊがθに漸近するようにｑｊの値を決める事に相当する。
【０２３０】
したがって、三角関数を計算時の桁落ち等による数値計算上の誤差を無視した理論的な誤差は、θ−θｊの差に起因したものになり、具体的にはｃｏｓθｊの誤差、ｓｉｎθｊの誤差は、それぞれ次式のようになる。
【０２３１】
2004126872.tif 000032
（θｊ−θが小さい場合）
【０２３２】
2004126872.tif 000033
（θｊ−θが小さい場合）
【０２３３】
Ｎビット数の三角関数の計算を行いＮ−１回反復を行うと、θｊ−θ〜ｔａｎ−１（２−Ｎ）〜２−Ｎ程度になる。三角関数が　−１＜　ｓｉｎθ、ｃｏｓθ＜１　であることを考えると、Ｎビット数の三角関数をＮ−１回の反復計算で求めた場合、三角関数の誤差は、およそ、（θｊ−θ）　〜２−Ｎ程度になる。
【０２３４】
上述した漸化式は、ｑｊで場合分けを行うと次の様に書きなおせる。
【０２３５】
ｑｊ　＝　１　の場合、以下のようになる。
【０２３６】
ｒｊ　＝　ｒｊ−１−ｔａｎ−１（２ｊ）
θｊ　＝θｊ−１＋ｔａｎ−１（２ｊ）
ｘｊ　＝　ｘｊ−１−２ｊ・ｙｊ−１
ｙｊ　＝　ｙｊ−１＋２ｊ・ｘｊ−１
Ｚｊ　＝　Ｚｊ−１・ｃｏｓ（ｔａｎ−１（２ｊ））
【０２３７】
ｑｊ　＝　−１　の場合、以下のようになる。
【０２３８】
ｒｊ　＝　ｒｊ−１＋ｔａｎ−１（２ｊ）
θｊ　＝θｊ−１−ｔａｎ−１（２ｊ）
ｘｊ　＝　ｘｊ−１＋２ｊ・ｙｊ−１
ｙｊ　＝　ｙｊ−１−２ｊ・ｘｊ−１
Ｚｊ　＝　Ｚｊ−１・ｃｏｓ（ｔａｎ−１（２ｊ））
【０２３９】
以上を踏まえ、Ｘ　＝　ｘｊ、Ｙ　＝　ｙｊ、Ｚ　＝　Ｚｊ　として、２進数で表された以下に示すθを引数とする三角関数を計算する場合のアルゴリズムの一例を図９に示す。
【０２４０】
【数４６】
2004126872.tif 000034
【０２４１】
簡単の為、読み出しを行っているビット位置のインデックスを変数Ｉとして説明を行う。まず初期値として、Ｉ＝−１、Ｒ＝θ、Ｘ＝１、Ｙ＝０、Ｚ＝１　とおく（ステップＳ４７）。次に、Ｉ＝Ｍ　であるか否かが判定される（ステップＳ４８）。ステップ４８において、「Ｙｅｓ」すなわち、Ｉ＝Ｍ　であると判定された場合には、ステップＳ５４に進む。ステップＳ４８において、「Ｎｏ」すなわち、Ｉ＝Ｍ　でないと判定された場合には、ステップＳ４９に進む。
【０２４２】
ステップＳ４９では、変数Ｉをインクリメント、すなわち、Ｉ＝Ｉ＋１　とし、続いて　ｑＩ　が「１」、「−１」の場合について、Ｓ　＝　Ｒ−ｑＩ　ｔａｎ−１（２Ｉ）をそれぞれ計算（図９中、ＲＰが　ｑＩ　＝　１　の場合、ＲＮが　ｑＩ　＝　−１　の場合）する（ステップＳ５０）。次に、｜ＲＰ｜　≦　｜ＲＮ｜　であるか否かを判定する（ステップＳ５０）。そして、｜ＲＰ｜　≦　｜ＲＮ｜　であれば、ｑＩ　＝　１　そうでなければ、ｑＩ　＝　−１　とし、｜Ｓ｜が最小となる　ｑＩ　を決める。ステップＳ５１において、「Ｙｅｓ」すなわち、｜ＲＰ｜　≦　｜ＲＮ｜であり、ｑＩ　＝　１とされた場合には、ステップＳ５２に進む。ステップＳ５２では、以下の計算をそれぞれ行い、Ｘ、Ｙ、Ｚの値を逐次更新する。（Ｗは一時的にＸの更新値を格納する変数）
【０２４３】
Ｗ　＝　Ｘ
Ｘ　＝　Ｘ−２Ｉ・Ｙ
Ｙ　＝　Ｙ＋２Ｉ・Ｗ
Ｚ　＝　Ｚ・ｃｏｓ（ｔａｎ−１（２Ｉ））
【０２４４】
ステップＳ５２においてＸ、Ｙ、Ｚの値を更新し、Ｒ　＝　ＲＰ　とした後、ステップＳ４８に戻る。
【０２４５】
ステップＳ５１において、「Ｎｏ」すなわち、｜ＲＰ｜　≦　｜ＲＮ｜でなく、ｑＩ　＝　−１とされた場合には、ステップＳ５３に進む。ステップＳ５３では、以下の計算をそれぞれ行い、Ｘ、Ｙ、Ｚの値を逐次更新する。（Ｗは一時的にＸの更新値を格納する変数）
【０２４６】
Ｗ　＝　Ｘ
Ｘ　＝　Ｘ＋２Ｉ・Ｙ
Ｙ　＝　Ｙ−２Ｉ・Ｗ
Ｚ　＝　Ｚ・ｃｏｓ（ｔａｎ−１（２Ｉ））
【０２４７】
ステップＳ５３においてＸ、Ｙ、Ｚの値を更新し、Ｒ　＝　ＲＮ　とした後、ステップＳ４８に戻る。
【０２４８】
ステップＳ５４では、最終的に求まるＸ、Ｙ、Ｚから、下記の式を使いｃｏｓ（θ）、ｓｉｎ（θ）を計算する。
【０２４９】
ｃｏｓ（θ）　＝　Ｘ・Ｚ
ｓｉｎ（θ）　＝　Ｙ・Ｚ
【０２５０】
必要に応じて、ｔａｎ（θ）等のｓｉｎ（θ）　、ｃｏｓ（θ）の関数は、ステップＳ４７〜ステップＳ５４で求まったｓｉｎ（θ）　、ｃｏｓ（θ）から計算する。
【０２５１】
本アルゴリズムを用いると、従来の２進数の引数を用いて漸化式を解くアルゴリズムに比べ、引数の非ゼロビット桁の反復計算で行われる乗算がおよそ２５％削減でき、計算の高速化が実現できる。
【０２５２】
また、上述した漸化式における、２ｊ　ｘｊ−１　と２ｊ　ｙｊ−１　は、単に　ｘｊ−１　と　ｙｊ−１　のビットシフトで対応が可能である為、１反復計算に必要な計算時間は、第１〜第８の実施形態に比べ短くて済む。
【０２５３】
また、ｔａｎ−１（２ｊ）、ｃｏｓ（ｔａｎ−１（２ｊ））の数列を予めメモリ上に記憶させ、漸化式を解く際に使用する事により、除算器の省略および従来のＣＯＲＤＩＣ法に比べ高速な計算処理が実現できる。
【０２５４】
第１０の実施形態
数式１３および数式１４の漸化式から、ｆｉ　＝　ｑｉ・ｔａｎ−１（２ｉ）（ｑｉ　＝　０，±１）と置いた時、漸化式は簡単になる事が予想できる。以下に、ｆｉ　＝　ｑｉ・ｔａｎ−１（２ｉ）（ｑｉ　＝　０，±１）と置いた時の、三角関数の計算法について説明する。
【０２５５】
一般に、ｆｉ　＝　ｑｉ・ｔａｎ−１（２ｉ）の線形結合で、三角関数の引数を表現する場合、漸化式、漸化式の初期値は次の様に書ける。
【０２５６】
ｒｊ　＝　ｒｊ−１−ｑｊ・ｔａｎ−１（２ｊ）
θｊ　＝θｊ−１＋ｑｊ・ｔａｎ−１（２ｊ）
ｘｊ　＝　ｘｊ−１−ｔａｎ（ｑｊ・ｔａｎ−１（２ｊ））・ｙｊ−１　＝　ｘｊ−１−ｑｊ・２ｊ・ｙｊ−１
ｙｊ　＝　ｙｊ−１＋ｔａｎ（ｑｊ・ｔａｎ−１（２ｊ））・ｘｊ−１　＝　ｙｊ−１＋ｑｊ・２ｊ・ｘｊ−１
Ｚｊ　＝　Ｚｊ−１・ｃｏｓ（ｑｊ・ｔａｎ−１（２ｊ））　＝　Ｚｊ−１［１−ｑｊ２＋ｑｊ２・ｃｏｓ（ｔａｎ−１（２ｊ））］
ｊ＝０，−２，…，−Ｎ（Ｎ＞０）
【０２５７】
ｒ−１　＝　θ
θ−１　＝　０
ｘ−１　＝　１
ｙ−１　＝　０
Ｚ−１　＝　１
θ　＝　θＭ
【０２５８】
ｃｏｓ（θ）　＝　ｘＭ・ＺＭ
ｓｉｎ（θ）　＝　ｙＭ・ＺＭ
【０２５９】
尚、ｑｊ　の値は、ｒｊ　の絶対値が最小になるように「１」又は「−１」から選ぶ。すなわち、θｊが近似的なθの値になる。したがって、ｑｊが「１」、「−１」の場合について、各々θｊの値を計算し、θｊ−θの絶対値が最小になるｑｊの値を「１」、「−１」の中から選ぶことにより、ｑｊの値を決定する。求めたｑｊの値から、ｘｊ、ｙｊ、Ｚｊを計算する。さらに詳しくは、θｊは、ｔａｎ−１（２ｊ）の級数和で書いたθの漸近値に相当し、ｒｊ　は、θ−θｊに相当する。θｊは、反復のたびにθの値に漸近していく。よって、ｒｊ　の絶対値が最小になるようにｑｊ　の値を決める事は、θｊがθに漸近するようにｑｊの値を決める事に相当する。ｃｏｓθｊの誤差、ｓｉｎθｊの誤差については、上述した第９の実施形態において説明したのでここでは省略する。
【０２６０】
上述した漸化式は、ｑｊで場合分けを行うと次の様に書きなおせる。
【０２６１】
ｑｊ　＝　０　の場合、以下のようになる。
【０２６２】
ｒｊ　＝　ｒｊ−１
θｊ　＝θｊ−１
ｘｊ　＝　ｘｊ−１
ｙｊ　＝　ｙｊ−１
Ｚｊ　＝　Ｚｊ−１
【０２６３】
ｑｊ　＝　１　の場合、以下のようになる。
【０２６４】
ｒｊ　＝　ｒｊ−１−ｔａｎ−１（２ｊ）
θｊ　＝θｊ−１＋ｔａｎ−１（２ｊ）
ｘｊ　＝　ｘｊ−１−２ｊ・ｙｊ−１
ｙｊ　＝　ｙｊ−１＋２ｊ・ｘｊ−１
Ｚｊ　＝　Ｚｊ−１・ｃｏｓ（ｔａｎ−１（２ｊ））
【０２６５】
ｑｊ　＝　−１　の場合、以下のようになる。
【０２６６】
ｒｊ　＝　ｒｊ−１＋ｔａｎ−１（２ｊ）
θｊ　＝θｊ−１−ｔａｎ−１（２ｊ）
ｘｊ　＝　ｘｊ−１＋２ｊ・ｙｊ−１
ｙｊ　＝　ｙｊ−１−２ｊ・ｘｊ−１
Ｚｊ　＝　Ｚｊ−１・ｃｏｓ（ｔａｎ−１（２ｊ））
【０２６７】
以上を踏まえ、Ｘ　＝　ｘｊ、Ｙ　＝　ｙｊ、Ｚ　＝　Ｚｊ　として、２進数で表された以下に示すθを引数とする三角関数を計算する場合のアルゴリズムの一例を図１０に示す。
【０２６８】
【数４７】
2004126872.tif 000035
【０２６９】
簡単の為、読み出しを行っているビット位置のインデックスを変数Ｉとして説明を行う。まず初期値として、Ｉ＝−１、Ｒ＝θ、Ｘ＝１、Ｙ＝０、Ｚ＝１　とおく（ステップＳ５５）。次に、Ｉ＝Ｍ　であるか否かが判定される（ステップＳ５６）。ステップ５６において、「Ｙｅｓ」すなわち、Ｉ＝Ｍ　であると判定された場合には、ステップＳ６２に進む。ステップＳ５６において、「Ｎｏ」すなわち、Ｉ＝Ｍ　でないと判定された場合には、ステップＳ５７に進む。
【０２７０】
ステップＳ５７では、変数Ｉをインクリメント、すなわち、Ｉ＝Ｉ＋１　とし、続いて　ｑＩ　が「１」、「−１」の場合について、Ｓ　＝　Ｒ−ｑＩ　ｔａｎ−１（２Ｉ）をそれぞれ計算（図９中、ＲＰが　ｑＩ　＝　１　の場合、ＲＮが　ｑＩ　＝　−１　の場合）する（ステップＳ５８）。次に、｜ＲＰ｜、｜ＲＮ｜、｜Ｒ｜　の中でいずれが最小であるかを判定する（ステップＳ５９）。ステップＳ５９において、｜Ｒ｜　が最小であると判定された場合には、ステップＳ５６に戻る。
【０２７１】
ステップＳ５９において、｜Ｒ｜が最小でないと判定された場合には、｜Ｓ｜が最小となる　ｑＩ　を決める。すなわち、｜ＲＰ｜　と　｜ＲＮ｜　を比較し、｜ＲＰ｜　≦　｜ＲＮ｜　のときは、ｑＩ　＝　１　とし、ステップＳ６０に進む。ステップＳ６０では、以下の計算をそれぞれ行い、Ｘ、Ｙ、Ｚの値を逐次更新する。（Ｗは一時的にＸの更新値を格納する変数）
【０２７２】
Ｗ　＝　Ｘ
Ｘ　＝　Ｘ−２Ｉ・Ｙ
Ｙ　＝　Ｙ＋２Ｉ・Ｗ
Ｚ　＝　Ｚ・ｃｏｓ（ｔａｎ−１（２Ｉ））
【０２７３】
ステップＳ６０においてＸ、Ｙ、Ｚの値を更新し、Ｒ　＝　ＲＰ　とした後、ステップＳ５６に戻る。
【０２７４】
ステップＳ５９において、｜Ｒ｜が最小でないと判定され、｜ＲＰ｜　≦　｜ＲＮ｜でないときには、ｑＩ　＝　−１とされ、ステップＳ６１に進む。ステップＳ６１では、以下の計算をそれぞれ行い、Ｘ、Ｙ、Ｚの値を逐次更新する。（Ｗは一時的にＸの更新値を格納する変数）
【０２７５】
Ｗ　＝　Ｘ
Ｘ　＝　Ｘ＋２Ｉ・Ｙ
Ｙ　＝　Ｙ−２Ｉ・Ｗ
Ｚ　＝　Ｚ・ｃｏｓ（ｔａｎ−１（２Ｉ））
【０２７６】
ステップＳ６１においてＸ、Ｙ、Ｚの値を更新し、Ｒ　＝　ＲＮ　とした後、ステップＳ５６に戻る。
【０２７７】
ステップＳ６２では、最終的に求まるＸ、Ｙ、Ｚから、下記の式を使いｃｏｓ（θ）、ｓｉｎ（θ）を計算する。
【０２７８】
ｃｏｓ（θ）　＝　Ｘ・Ｚ
ｓｉｎ（θ）　＝　Ｙ・Ｚ
【０２７９】
必要に応じて、ｔａｎ（θ）等のｓｉｎ（θ）　、ｃｏｓ（θ）の関数は、ステップＳ５５〜ステップＳ６２で求まったｓｉｎ（θ）　、ｃｏｓ（θ）から計算する。
【０２８０】
本アルゴリズムを用いると、従来の２進数の引数を用いて漸化式を解くアルゴリズムに比べ、引数の非ゼロビット桁の反復計算で行われる乗算がおよそ２５％削減でき、計算の高速化が実現できる。
【０２８１】
また、上述した漸化式における、２ｊ　ｘｊ−１　と２ｊ　ｙｊ−１　は、単に　ｘｊ−１　と　ｙｊ−１　のビットシフトで対応が可能である為、１反復計算に必要な計算時間は、第１〜第８の実施形態に比べ短くて済む。
【０２８２】
また、ｔａｎ−１（２ｊ）、ｃｏｓ（ｔａｎ−１（２ｊ））の数列を予めメモリ上に記憶させ、漸化式を解く際に使用する事により、除算器の省略および従来のＣＯＲＤＩＣ法に比べ高速な計算処理が実現できる。
【０２８３】
第１１の実施形態
数式１３および数式１４の漸化式から、ｆｉ　＝　ｑｉ・ｔａｎｈ−１（２ｉ）（ｑｉ　＝　±１）と置いた時、漸化式は簡単になる事が予想できる。以下に、ｆｉ　＝　ｑｉ・ｔａｎｈ−１（２ｉ）（ｑｉ　＝　±１）と置いた時の、双曲線関数の計算法について説明する。
【０２８４】
一般に、ｆｉ　＝　ｑｉ・ｔａｎｈ−１（２ｉ）の線形結合で、双曲線関数の引数を表現する場合、漸化式、漸化式の初期値は次の様に書ける。
【０２８５】
ｒｊ　＝　ｒｊ−１−ｑｊ・ｔａｎｈ−１（２ｊ）
θｊ　＝θｊ−１＋ｑｊ・ｔａｎｈ−１（２ｊ）
ｘｊ　＝　ｘｊ−１＋ｔａｎｈ（ｑｊ・ｔａｎｈ−１（２ｊ））・ｙｊ−１　＝　ｘｊ−１＋ｑｊ・２ｊ・ｙｊ−１
ｙｊ　＝　ｙｊ−１＋ｔａｎｈ（ｑｊ・ｔａｎｈ−１（２ｊ））・ｘｊ−１　＝　ｙｊ−１＋ｑｊ・２ｊ・ｘｊ−１
Ｚｊ　＝　Ｚｊ−１・ｃｏｓｈ（ｑｊ・ｔａｎｈ−１（２ｊ））　＝　Ｚｊ−１［（１−ｑｊ２）＋ｑｊ２・ｃｏｓｈ（ｔａｎｈ−１（２ｊ））］
ｊ＝Ｎ，Ｎ＋１，…，Ｍ−１，Ｍ（Ｍ≧Ｎ）
【０２８６】
ｘＮ−１　＝　１
ｙＮ−１　＝　０
ＺＮ−１　＝　１
θ　＝　θＭ
【０２８７】
ｃｏｓｈ（θ）　＝　ｘＭ・ＺＭ
ｓｉｎｈ（θ）　＝　ｙＭ・ＺＭ
【０２８８】
尚、ｑｊ　の値は、ｒｊ　の絶対値が最小になるように「１」又は「−１」から選ぶ。すなわち、θｊが近似的なθの値になる。したがって、ｑｊが「１」、「−１」の場合について、各々θｊの値を計算し、θｊ−θの絶対値が最小になるｑｊの値を「１」、「−１」の中から選ぶことにより、ｑｊの値を決定する。求めたｑｊの値から、ｘｊ、ｙｊ、Ｚｊを計算する。さらに詳しくは、θｊは、ｔａｎｈ−１（２ｊ）の級数和で書いたθの漸近値に相当し、ｒｊ　は、θ−θｊに相当する。θｊは、反復のたびにθの値に漸近していく。よって、ｒｊ　の絶対値が最小になるようにｑｊ　の値を決める事は、θｊがθに漸近するようにｑｊの値を決める事に相当する。ｃｏｓｈθｊの誤差、ｓｉｎｈθｊの誤差については、上述した第９の実施形態と同様に考えられるので、ここでは説明を省略する。
【０２８９】
上述した漸化式は、ｑｊで場合分けを行うと次の様に書きなおせる。
【０２９０】
ｑｊ　＝　１　の場合、以下のようになる。
【０２９１】
ｒｊ　＝　ｒｊ−１−ｔａｎｈ−１（２ｊ）
θｊ　＝θｊ−１＋ｔａｎｈ−１（２ｊ）
ｘｊ　＝　ｘｊ−１＋２ｊ・ｙｊ−１
ｙｊ　＝　ｙｊ−１＋２ｊ・ｘｊ−１
Ｚｊ　＝　Ｚｊ−１・ｃｏｓｈ（ｔａｎｈ−１（２ｊ））
【０２９２】
ｑｊ　＝　−１　の場合、以下のようになる。
【０２９３】
ｒｊ　＝　ｒｊ−１＋ｔａｎｈ−１（２ｊ）
θｊ　＝θｊ−１−ｔａｎｈ−１（２ｊ）
ｘｊ　＝　ｘｊ−１−２ｊ・ｙｊ−１
ｙｊ　＝　ｙｊ−１−２ｊ・ｘｊ−１
Ｚｊ　＝　Ｚｊ−１・ｃｏｓｈ（ｔａｎｈ−１（２ｊ））
【０２９４】
以上を踏まえ、Ｘ　＝　ｘｊ、Ｙ　＝　ｙｊ、Ｚ　＝　Ｚｊ　として、２進数で表された以下に示すθを引数とする双曲線関数を計算する場合のアルゴリズムの一例を図１１に示す。
【０２９５】
【数４８】
2004126872.tif 000036
【０２９６】
簡単の為、読み出しを行っているビット位置のインデックスを変数Ｉとして説明を行う。まず初期値として、Ｉ＝−１、Ｒ＝θ、Ｘ＝１、Ｙ＝０、Ｚ＝１　とおく（ステップＳ６３）。次に、Ｉ＝Ｍ　であるか否かが判定される（ステップＳ６４）。ステップ６４において、「Ｙｅｓ」すなわち、Ｉ＝Ｍ　であると判定された場合には、ステップＳ７０に進む。ステップＳ６４において、「Ｎｏ」すなわち、Ｉ＝Ｍ　でないと判定された場合には、ステップＳ６５に進む。
【０２９７】
ステップＳ６５では、変数Ｉをインクリメント、すなわち、Ｉ＝Ｉ＋１　とし、続いて　ｑＩ　が「１」、「−１」の場合について、Ｓ　＝　Ｒ−ｑＩ　ｔａｎ−１（２Ｉ）をそれぞれ計算（図１１中、ＲＰが　ｑＩ　＝　１　の場合、ＲＮが　ｑＩ　＝　−１　の場合）する（ステップＳ６６）。次に、｜ＲＰ｜　≦　｜ＲＮ｜　であるか否かを判定する（ステップＳ６７）。そして、｜ＲＰ｜　≦　｜ＲＮ｜　であれば、ｑＩ　＝　１　そうでなければ、ｑＩ　＝　−１　とし、｜Ｓ｜が最小となる　ｑＩ　を決める。ステップＳ６７において、「Ｙｅｓ」すなわち、｜ＲＰ｜　≦　｜ＲＮ｜であり、ｑＩ　＝　１とされた場合には、ステップＳ６８に進む。ステップＳ６８では、以下の計算をそれぞれ行い、Ｘ、Ｙ、Ｚの値を逐次更新する。（Ｗは一時的にＸの更新値を格納する変数）
【０２９８】
Ｒ　＝　Ｒ−ｔａｎｈ−１（２Ｉ）
Ｗ　＝　Ｘ
Ｘ　＝　Ｘ＋２Ｉ・Ｙ
Ｙ　＝　Ｙ＋２Ｉ・Ｗ
Ｚ　＝　Ｚ・ｃｏｓｈ（ｔａｎｈ−１（２Ｉ））
【０２９９】
ステップＳ６８においてＸ、Ｙ、Ｚの値を更新し、Ｒ　＝　ＲＰ　とした後、ステップＳ６４に戻る。
【０３００】
ステップＳ６７において、「Ｎｏ」すなわち、｜ＲＰ｜　≦　｜ＲＮ｜でなく、ｑＩ　＝　−１とされた場合には、ステップＳ６９に進む。ステップＳ６９では、以下の計算をそれぞれ行い、Ｘ、Ｙ、Ｚの値を逐次更新する。（Ｗは一時的にＸの更新値を格納する変数）
【０３０１】
Ｒ　＝　Ｒ＋ｔａｎｈ−１（２Ｉ）
Ｗ　＝　Ｘ
Ｘ　＝　Ｘ−２Ｉ・Ｙ
Ｙ　＝　Ｙ−２Ｉ・Ｗ
Ｚ　＝　Ｚ・ｃｏｓｈ（ｔａｎｈ−１（２Ｉ））
【０３０２】
ステップＳ６９においてＸ、Ｙ、Ｚの値を更新し、Ｒ　＝　ＲＮ　とした後、ステップＳ６４に戻る。
【０３０３】
ステップＳ７０では、最終的に求まるＸ、Ｙ、Ｚから、下記の式を使いｃｏｓｈ（θ）、ｓｉｎｈ（θ）を計算する。
【０３０４】
ｃｏｓｈ（θ）　＝　Ｘ・Ｚ
ｓｉｎｈ（θ）　＝　Ｙ・Ｚ
【０３０５】
必要に応じて、ｔａｎｈ（θ）等のｓｉｎｈ（θ）　、ｃｏｓｈ（θ）の関数は、ステップＳ６３〜ステップＳ７０で求まったｓｉｎｈ（θ）　、ｃｏｓｈ（θ）から計算する。
【０３０６】
本アルゴリズムを用いると、従来の２進数の引数を用いて漸化式を解くアルゴリズムに比べ、引数の非ゼロビット桁の反復計算で行われる乗算がおよそ２５％削減でき、計算の高速化が実現できる。
【０３０７】
また、上述した漸化式における、２ｊ　ｘｊ−１　と２ｊ　ｙｊ−１　は、単に　ｘｊ−１　と　ｙｊ−１　のビットシフトで対応が可能である為、１反復計算に必要な計算時間は、第１〜第８の実施形態に比べ短くて済む。
【０３０８】
また、ｔａｎ−１（２ｊ）、ｃｏｓ（ｔａｎ−１（２ｊ））の数列を予めメモリ上に記憶させ、漸化式を解く際に使用する事により、除算器の省略および従来のＣＯＲＤＩＣ法に比べ高速な計算処理が実現できる。
【０３０９】
実施形態１２
数式１３および数式１４の漸化式から、ｆｉ　＝　ｑｉ・ｔａｎｈ−１（２ｉ）（ｑｉ　＝　０，±１）と置いた時、漸化式は簡単になる事が予想できる。以下に、ｆｉ　＝　ｑｉ・ｔａｎｈ−１（２ｉ）（ｑｉ　＝　０，±１）と置いた時の、双曲線関数の計算法について説明する。
【０３１０】
一般に、ｆｉ　＝　ｑｉ・ｔａｎｈ−１（２ｉ）の線形結合で、双曲線関数の引数を表現する場合、漸化式、漸化式の初期値は次の様に書ける。
【０３１１】
ｒｊ　＝　ｒｊ−１−ｑｊ・ｔａｎｈ−１（２ｊ）
θｊ　＝θｊ−１＋ｑｊ・ｔａｎｈ−１（２ｊ）
ｘｊ　＝　ｘｊ−１＋ｔａｎｈ（ｑｊ・ｔａｎｈ−１（２ｊ））・ｙｊ−１　＝　ｘｊ−１＋ｑｊ・２ｊ・ｙｊ−１
ｙｊ　＝　ｙｊ−１＋ｔａｎｈ（ｑｊ・ｔａｎｈ−１（２ｊ））・ｘｊ−１　＝　ｙｊ−１＋ｑｊ・２ｊ・ｘｊ−１
Ｚｊ　＝　Ｚｊ−１・ｃｏｓｈ（ｑｊ・ｔａｎｈ−１（２ｊ））　＝　Ｚｊ−１［（１−ｑｊ２）＋ｑｊ２・ｃｏｓｈ（ｔａｎｈ−１（２ｊ））］
ｊ＝Ｎ，Ｎ＋１，…，Ｍ−１，Ｍ（Ｍ≧Ｎ）
【０３１２】
ｘＮ−１　＝　１
ｙＮ−１　＝　０
ＺＮ−１　＝　１
θ　＝　θＭ
【０３１３】
ｃｏｓｈ（θ）　＝　ｘＭ・ＺＭ
ｓｉｎｈ（θ）　＝　ｙＭ・ＺＭ
【０３１４】
尚、ｑｊ　の値は、ｒｊ　の絶対値が最小になるように「１」又は「−１」から選ぶ。すなわち、θｊが近似的なθの値になる。したがって、ｑｊが「１」、「−１」の場合について、各々θｊの値を計算し、θｊ−θの絶対値が最小になるｑｊの値を「１」、「−１」の中から選ぶことにより、ｑｊの値を決定する。求めたｑｊの値から、ｘｊ、ｙｊ、Ｚｊを計算する。さらに詳しくは、θｊは、ｔａｎｈ−１（２ｊ）の級数和で書いたθの漸近値に相当し、ｒｊ　は、θ−θｊに相当する。θｊは、反復のたびにθの値に漸近していく。よって、ｒｊ　の絶対値が最小になるようにｑｊ　の値を決める事は、θｊがθに漸近するようにｑｊの値を決める事に相当する。ｃｏｓｈθｊの誤差、ｓｉｎｈθｊの誤差については、上述した第９の実施形態と同様に考えられるので、ここでは説明を省略する。
【０３１５】
上述した漸化式は、ｑｊで場合分けを行うと次の様に書きなおせる。
【０３１６】
ｑｊ　＝　０　の場合、以下のようになる。
【０３１７】
ｒｊ　＝　ｒｊ−１
θｊ　＝θｊ−１
ｘｊ　＝　ｘｊ−１
ｙｊ　＝　ｙｊ−１
Ｚｊ　＝　Ｚｊ−１
【０３１８】
ｑｊ　＝　１　の場合、以下のようになる。
【０３１９】
ｒｊ　＝　ｒｊ−１−ｔａｎｈ−１（２ｊ）
θｊ　＝θｊ−１＋ｔａｎｈ−１（２ｊ）
ｘｊ　＝　ｘｊ−１＋２ｊ・ｙｊ−１
ｙｊ　＝　ｙｊ−１＋２ｊ・ｘｊ−１
Ｚｊ　＝　Ｚｊ−１・ｃｏｓｈ（ｔａｎｈ−１（２ｊ））
【０３２０】
ｑｊ　＝　−１　の場合、以下のようになる。
【０３２１】
ｒｊ　＝　ｒｊ−１＋ｔａｎｈ−１（２ｊ）
θｊ　＝θｊ−１−ｔａｎｈ−１（２ｊ）
ｘｊ　＝　ｘｊ−１−２ｊ・ｙｊ−１
ｙｊ　＝　ｙｊ−１−２ｊ・ｘｊ−１
Ｚｊ　＝　Ｚｊ−１・ｃｏｓｈ（ｔａｎｈ−１（２ｊ））
【０３２２】
以上を踏まえ、Ｘ　＝　ｘｊ、Ｙ　＝　ｙｊ、Ｚ　＝　Ｚｊ　として、２進数で表された以下に示すθを引数とする双曲線関数を計算する場合のアルゴリズムの一例を図１２に示す。
【０３２３】
【数４９】
2004126872.tif 000037
【０３２４】
簡単の為、読み出しを行っているビット位置のインデックスを変数Ｉとして説明を行う。最下位桁が　Ｉ＝Ｎ　の場合、初期値として、Ｘ＝１、Ｚ＝１、Ｙ＝０、Ｒ＝θを代入する（ステップＳ７１）。次に、Ｉ＝Ｍ　であるか否かが判定される（ステップＳ７２）。ステップＳ７２において、「Ｙｅｓ」すなわち、Ｉ＝Ｍ　であると判定された場合には、ステップＳ７８に進む。ステップＳ７２において、「Ｎｏ」すなわち、Ｉ＝Ｍ　でないと判定された場合には、ステップＳ７３に進む。
【０３２５】
ステップＳ７３では、変数Ｉをインクリメント、すなわち、Ｉ＝Ｉ＋１　とし、続いて　ｑＩ　が「１」、「−１」の場合について、Ｓ　＝　Ｒ−ｑＩ　ｔａｎ−１（２Ｉ）をそれぞれ計算（図１２中、ＲＰが　ｑＩ　＝　１　の場合、ＲＮが　ｑＩ　＝　−１　の場合）する（ステップＳ７４）。次に、｜ＲＰ｜、｜ＲＮ｜、｜Ｒ｜　の中でいずれが最小であるかを判定する（ステップＳ７５）。ステップＳ７５において、｜Ｒ｜　が最小であると判定された場合には、ステップＳ７２に戻る。
【０３２６】
ステップＳ７５において、｜Ｒ｜が最小でないと判定された場合には、｜Ｓ｜が最小となる　ｑＩ　を決める。すなわち、｜ＲＰ｜　と　｜ＲＮ｜　を比較し、｜ＲＰ｜　≦　｜ＲＮ｜　のときは、ｑＩ　＝　１　とし、ステップＳ７６に進む。ステップＳ７６では、以下の計算をそれぞれ行い、Ｘ、Ｙ、Ｚの値を逐次更新する。（Ｗは一時的にＸの更新値を格納する変数）
【０３２７】
Ｒ　＝　Ｒ−ｔａｎｈ−１（２Ｉ）
Ｗ　＝　Ｘ
Ｘ　＝　Ｘ＋２Ｉ・Ｙ
Ｙ　＝　Ｙ＋２Ｉ・Ｗ
Ｚ　＝　Ｚ・ｃｏｓｈ（ｔａｎｈ−１（２Ｉ））
【０３２８】
ステップＳ７６においてＸ、Ｙ、Ｚの値を更新し、Ｒ　＝　ＲＰ　とした後、ステップＳ７２に戻る。
【０３２９】
ステップＳ７５において、｜Ｒ｜が最小でないと判定され、｜ＲＰ｜　≦　｜ＲＮ｜でないときには、ｑＩ　＝　−１とされ、ステップＳ７７に進む。ステップＳ７７では、以下の計算をそれぞれ行い、Ｘ、Ｙ、Ｚの値を逐次更新する。（Ｗは一時的にＸの更新値を格納する変数）
【０３３０】
Ｒ　＝　Ｒ＋ｔａｎｈ−１（２Ｉ）
Ｗ　＝　Ｘ
Ｘ　＝　Ｘ−２Ｉ・Ｙ
Ｙ　＝　Ｙ−２Ｉ・Ｗ
Ｚ　＝　Ｚ・ｃｏｓｈ（ｔａｎｈ−１（２Ｉ））
【０３３１】
ステップＳ７７においてＸ、Ｙ、Ｚの値を更新し、Ｒ　＝　ＲＮ　とした後、ステップＳ７２に戻る。
【０３３２】
ステップＳ７８では、最終的に求まるＸ、Ｙ、Ｚから、下記の式を使いｃｏｓｈ（θ）、ｓｉｎｈ（θ）を計算する。
【０３３３】
ｃｏｓｈ（θ）　＝　Ｘ・Ｚ
ｓｉｎｈ（θ）　＝　Ｙ・Ｚ
【０３３４】
必要に応じて、ｔａｎｈ（θ）等のｓｉｎｈ（θ）　、ｃｏｓｈ（θ）の関数は、ステップＳ７１〜ステップＳ７８で求まったｓｉｎｈ（θ）　、ｃｏｓｈ（θ）から計算する。
【０３３５】
本アルゴリズムを用いると、従来の２進数の引数を用いて漸化式を解くアルゴリズムに比べ、引数の非ゼロビット桁の反復計算で行われる乗算がおよそ２５％削減でき、計算の高速化が実現できる。
【０３３６】
また、上述した漸化式における、２ｊ　ｘｊ−１　と２ｊ　ｙｊ−１　は、単に　ｘｊ−１　と　ｙｊ−１のビットシフトで対応が可能である為、１反復計算に必要な計算時間は、第１〜第８の実施形態に比べ短くて済む。
【０３３７】
また、ｔａｎ−１（２ｊ）、ｃｏｓ（ｔａｎ−１（２ｊ））の数列を予めメモリ上に記憶させ、漸化式を解く際に使用する事により、除算器の省略および従来のＣＯＲＤＩＣ法に比べ高速な計算処理が実現できる。
【０３３８】
第１３の実施形態
第１〜第１２の実施形態で説明したアルゴリズムを採用した演算装置（電気回路）、プログラムおよびプログラムが記録された記録媒体により、三角関数または双曲線関数等の計算を実際にコンピュータに実行させることができる。記録媒体としては、磁気ディスク等の磁気的メモリでも良いし、電気回路等により構成する電気的メモリなどでも良い。が図１３は、この発明の第１３の実施形態による演算装置の一例である。
【０３３９】
図１３に示す演算装置は、主にＭＰＵ１、ＲＡＭ２、ＲＯＭ３等のメモリ、ハードディスク４および入出力インタフェース５で構成されており、これら各装置は、Ｉ／Ｏコントローラ６を介してバス７により接続されている。
【０３４０】
ＭＰＵ１は、マイクロプロセッサユニットであり、演算、制御等のコンピュータの基本処理を行う。ＲＡＭ２は、書き込み可能メモリであり、ＭＰＵ１により生成される演算結果等のデータを一時的に格納する。ＲＯＭ３は、読み込み専用メモリであり、ＭＰＵ１に実行させるプログラムのマシンコード等を格納している。ハードディスク４は、大容量の記録媒体であり、補助記録媒体として使用される。入出力インタフェース５は、図示しないキーボードやテンキー等の入力装置、ディスプレイやプリンタ等の出力装置と接続するためのインタフェースである。Ｉ／Ｏコントローラ６は、バス７を通じて各装置のデータ入出力の制御を行う。
【０３４１】
この第１３の実施形態による演算装置には、上述した第１〜第１２の実施形態で説明したアルゴリズムがＭＰＵ１で実行可能なプログラムとしてハードディスク４、ＲＡＭ２、ＲＯＭ３等の記録媒体に記録されている。すなわち、この演算装置では、上述した第１〜第１２の実施形態で説明したようなアルゴリズムのプログラムが記録媒体に記録されており、記録されているプログラムを実行することで、三角関数や双曲線関数等の計算が行われる構成となっている。なお、プログラムを記録する記録媒体は、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭなどプログラムを記録できるものであれば、図１３中のハードディスク４などに限られない。
【０３４２】
以下、この演算装置の動作について説明する。まず、ＲＡＭ２に演算の種類、演算データ等が格納される。これら演算の種類および演算データ等は、例えば、図示しない入力装置等から、入力されＲＡＭ２等の主記憶装置に格納される。ＭＰＵ１は、これらデータとハードディスク４等に記録されているプログラムに従い演算の種類に応じた計算を行う。計算は、プログラムにより引数が２進数に変換され、反復計算により求められる。この際、ＲＯＭ３に予め記録しておいた関数のデータテーブル等が参照され計算が行われる。計算結果のデータは、一時的にＲＡＭ２に格納され、例えば図示しないディスプレイ等の出力装置に出力される。
【０３４３】
以上説明した第１３の実施形態の演算装置によれば、三角関数や双曲線関数等の計算のときに、上述した第１〜第１２に実施形態によるアルゴリズムを使用する事で、より少ないデータテーブル（ＲＯＭ３に蓄積されるデータ）で、三角関数、双曲線関数等の計算回路やプログラムを組み込むことができる。
【０３４４】
また、ｃｏｓ（２Ｉ）、ｔａｎ（２Ｉ）、ｃｏｓｈ（２Ｉ）、ｔａｎｈ（２Ｉ）のデータテーブルをＲＯＭ３等のメモリ内部やプログラム内部に用意しておくことで、三角関数、双曲線関数等を計算する際に、関数の引数のビット値が非ゼロの所だけを反復計算すれば、関数値を導出することが可能となる。
【０３４５】
また、Ｎ≦Ｉ≦Ｍ　の範囲内で、上述したｃｏｓ（２Ｉ）、ｔａｎ（２Ｉ）、ｃｏｓｈ（２Ｉ）、ｔａｎｈ（２Ｉ）のデータテーブルを有する場合には、三角関数、双曲線関数等の関数の引数は、［−２Ｍ，２Ｍ］の広い範囲での適用が可能である。また、従来のＣＯＲＤＩＣ法では、関数の引数をｔａｎ−１（２Ｉ）　で漸近展開する為、ｔａｎ−１（２Ｉ）〜２Ｉ　の近似が成り立つ位まで下位ビットを取らないと、関数の引数がｔａｎ−１（２Ｉ）　の線形結合に漸近していかないのに対し、第１〜第８の実施形態のアルゴリズムを使用すれば、関数の引数をｔａｎ−１（２Ｉ）　で漸近展開していない為、引数のビット数が高くなくても十分な計算精度を確保することができる。
【０３４６】
また、第９〜第１２の実施形態で説明したようなｔａｎ−１（２Ｉ）で漸近展開するアルゴリズムを使用する場合、ｃｏｓ（ｔａｎ−１（２Ｉ））の値のデータテーブルをＲＯＭ３等のメモリ内部やプログラム上に持たせることで、除算器による計算および平方根の計算を行う必要がなくなり、従来のＣＯＲＤＩＣ法に比べ高速な計算が可能となり、関数計算を含む専用回路等を作る場合は、安価に回路を作製することが出来る。また第９〜第１２の実施形態では、ｑｊの値を「１」、「−１」から選ぶとして説明したが、「１」、「−１」、「０」から選ぶとしても良い。
【０３４７】
この発明は、上述したこの発明の実施形態に限定されるものでは無く、この発明の要旨を逸脱しない範囲内で様々な変形や応用が可能である。例えば、上述した第１〜第１２の実施形態のアルゴリズムでは、下位桁のビットから上位桁のビットへと漸化式を解いて行ったが、最上位桁のビットから計算を開始し、下位桁のビットへ漸化式を解く事も可能である。
【０３４８】
また例えば、第１３の実施形態では演算装置としてコンピュータを用いて説明したが、これに限らず、演算装置として電卓、ゲーム機器等の内部で計算を行う機器や、これら機器に組み込まれる演算専用の電気回路等であってもよい。
【０３４９】
また例えば、第１３の実施形態による演算装置では、関数のデータテーブルをＲＯＭ３等のメモリやプログラム内部に持つ事を前提として説明したが、テーブルを持つ代わりに、関数のテーラー展開を用いて下位ビットを計算することで、関数テーブル用のメモリの節約を行っても良い。
【０３５０】
【発明の効果】
この発明による演算方法によれば、三角関数や双曲線関数等の引数を級数の和に展開し、加法定理を利用して除算、平方根計算を含まない形に変形した漸化式の反復計算によって関数値を計算するアルゴリズムを使用しているため、計算速度を向上し、且つ計算回路等のコストをかけずに、三角関数や双曲線関数等の関数の計算をすることができる。
【図面の簡単な説明】
【図１】この発明の第１の実施形態による三角関数計算のアルゴリズムを示す略線図である。
【図２】この発明の第２の実施形態による双曲線関数計算のアルゴリズムを示す略線図である。
【図３】この発明の第３の実施形態による三角関数計算のアルゴリズムを示す略線図である。
【図４】この発明の第４の実施形態による双曲線関数計算のアルゴリズムを示す略線図である。
【図５】この発明の第５の実施形態による三角関数計算のアルゴリズムを示す略線図である。
【図６】この発明の第６の実施形態による双曲線関数計算のアルゴリズムを示す略線図である。
【図７】この発明の第７の実施形態による三角関数計算のアルゴリズムを示す略線図である。
【図８】この発明の第８の実施形態による双曲線関数計算のアルゴリズムを示す略線図である。
【図９】この発明の第９の実施形態による三角関数計算のアルゴリズムを示す略線図である。
【図１０】この発明の第１０の実施形態による双曲線関数計算のアルゴリズムを示す略線図である。
【図１１】この発明の第１１の実施形態による三角関数計算のアルゴリズムを示す略線図である。
【図１２】この発明の第１２の実施形態による双曲線関数計算のアルゴリズムを示す略線図である。
【図１３】この発明の三角関数計算又は双曲線関数計算のアルゴリズムを利用する電気回路の一例を示す略線図である。
【図１４】従来の三角関数計算のアルゴリズムを示す略線図である。
【図１５】従来の双曲線関数計算のアルゴリズムを示す略線図である。
【符号の説明】
１・・・ＭＰＵ、２・・・Ｉ／Ｏコントローラ、３・・・ＲＡＭ、４・・・ＲＯＭ、５・・・ハードディスク、６・・・入出力インタフェース、７・・・バス
【図１】
2004126872.tif 000054
【図２】
2004126872.tif 000055
【図３】
2004126872.tif 000056
【図４】
2004126872.tif 000057
【図５】
2004126872.tif 000058
【図６】
2004126872.tif 000059
【図７】
2004126872.tif 000060
【図８】
2004126872.tif 000061
【図９】
2004126872.tif 000062
【図１０】
2004126872.tif 000063
【図１１】
2004126872.tif 000064
【図１２】
2004126872.tif 000065
【図１３】
2004126872.tif 000066
【図１４】
2004126872.tif 000067
【図１５】
2004126872.tif 000068