(57)【要約】 【課題】  原点位置の関数値が０で微係数が１となる関数の値を多項式近似で高精度に求める。【解決手段】  データプロセッサ（１）は、データ処理ユニット（２０）を有し、演算制御プログラムを実行するデータ処理ユニットは、演算制御プログラムに従って、原点位置の関数値が０で微係数が１となる関数の値を多項式近似でホーナー法により演算するとき、最後の積和演算を留保し、最後の乗算を積和演算に置き換える。或いは、最後の積和演算の加算を保留して乗算だけを行い、最後の乗算を、前記保留した加算項による値を加算項としてを含む積和演算に置き換える。最後の積和演算を留保することにより、最後の乗算を積和演算に置き換えることができ、最後の乗算を積和演算に置き換えることにより、丸め誤差を持たない変数の入力をそのまま関数の値の近似解に含めることが可能になり、それによって演算精度の向上に資することができる。【選択図】        図１
2006059085.tif 000002
【特許請求の範囲】
【請求項１】
データ処理ユニットと、前記データ処理ユニットが実行する演算制御プログラムを保有するプログラムメモリと、前記演算制御プログラムにしたがって前記データ処理ユニットがアクセスするワークメモリと、を有し、
前記データ処理ユニットは、前記演算制御プログラムに従って、原点位置の関数値が０で微係数が１となる関数の値を多項式近似でホーナー法により演算するとき、最後の積和演算を留保し、最後の乗算を積和演算に置き換えるデータプロセッサ。
【請求項２】
前記近似多項式は奇関数である請求項１記載のデータプロセッサ。
【請求項３】
前記関数の近似多項式をＧ（ｘ）＝ｃ０＊ｘ＋ｃ１＊ｘ＾３＋ｃ２＊ｘ＾５＋ｃ３＊ｘ＾７＋…（＊は乗算記号、＾はべき乗記号である）とすると、原点位置の関数値が０で微係数１であることよりｃ０＝１であり、ｘの入力ｄ１に対して前記近似多項式をＧ（ｄ１）＝ｄ１（１＋ｄ１＾２（ｃ１＋ｄ１＾２（ｃ２＋ｄ１＾２（ｃ３）…）））とし、入力ｄ１に対する前記関数の値をｄ１の高次側よりホーナー法により演算し、保留する最後の積和演算は１＋ｄ１＾２＊ａｎｓであり、最後の乗算に置き換えられる積和演算は、ａｎｓ＝ｄ１＋ｄ１＾３＊ａｎｓである請求項２記載のデータプロセッサ。
【請求項４】
前記近似対象関数はｓｉｎ（ｘ）、ａｓｉｎ（ｘ）又はｌｏｇ（１＋ｘ）である請求項１記載のデータプロセッサ。
【請求項５】
データ処理ユニットと、前記データ処理ユニットが実行する演算制御プログラムを保有するプログラムメモリと、前記演算制御プログラムにしたがって前記データ処理ユニットがアクセスするワークメモリと、を有し、
前記データ処理ユニットは、前記演算制御プログラムに従って、原点位置の関数値が０で微係数が１となる関数の値を多項式近似でホーナー法により演算するとき、最後の積和演算の加算を保留して乗算だけを行い、最後の乗算を、前記保留した加算項による値を加算項としてを含む積和演算に置き換えるデータプロセッサ。
【請求項６】
前記近似多項式は奇関数である請求項５記載のデータプロセッサ。
【請求項７】
前記関数の近似多項式をＧ（ｘ）＝ｃ０＊ｘ＋ｃ１＊ｘ＾３＋ｃ２＊ｘ＾５＋ｃ３＊ｘ＾７＋…とすると、原点位置の関数値が０で微係数１であることよりｃ０＝１であり、ｘの入力ｄ１に対して前記近似多項式をＧ（ｄ１）＝ｄ１（１＋ｄ１＾２（ｃ１＋ｄ１＾２（ｃ２＋ｄ１＾２（ｃ３…））））とし、入力ｄ１に対する前記関数の値をｄ１の高次側よりホーナー法により演算し、最後の積和演算は１＋ｄ１＾２＊ａｎｓでありその第1項目の加算を保留して第２項目の乗算ａｎｓ＝ｄ１＾２＊ａｎｓだけを行い、最後の乗算が置き換えられる積和演算は、ａｎｓ＝ｄ１＋ｄ１＊ａｎｓである請求項６記載のデータプロセッサ。
【請求項８】
前記近似対象関数はｓｉｎ（ｘ）又はｔａｎ（ｘ）である請求項５記載のデータプロセッサ。
【請求項９】
コンピュータ装置が演算制御プログラムを実行することにより、原点位置の関数値が０で微係数が１となる関数の値を１変数の多項式近似でホーナー法により取得するデータ処理方法であって、
変数の値をコンピュータ装置の第１の記憶装置にセットする処理と、
コンピュータ装置の演算ユニットにより前記第１の記憶装置にセットされた変数を用いて変数の高次側より積和演算を繰り返す処理と、
最後の積和演算を留保し、最後の乗算を積和に置き換えて前記演算ユニットにより当該積和演算を行う処理と、を含むデータ処理方法。
【請求項１０】
前記関数の近似多項式をＧ（ｘ）＝ｃ０＊ｘ＋ｃ１＊ｘ＾３＋ｃ２＊ｘ＾５＋ｃ３＊ｘ＾７＋…とすると、原点位置の関数値が０で微係数１であることよりｃ０＝１であり、ｘの入力ｄ１に対して前記近似多項式をＧ（ｄ１）＝ｄ１（１＋ｄ１＾２（ｃ１＋ｄ１＾２（ｃ２＋ｄ１＾２（ｃ３）…）））とし、入力ｄ１に対する前記関数の値をｄ１の高次側よりホーナー法により演算し、保留する最後の積和演算は１＋ｄ１＾２＊ａｎｓであり、最後の乗算に置き換えられる積和演算は、ａｎｓ＝ｄ１＋ｄ１＾３＊ａｎｓである請求項９記載のデータ処理方法。
【請求項１１】
コンピュータ装置が演算制御プログラムを実行することにより、原点位置の関数値が０で微係数が１となる関数の値を１変数の多項式近似でホーナー法により取得するデータ処理方法であって、
変数の値をコンピュータ装置の第１の記憶装置にセットする処理と、
コンピュータ装置の演算ユニットにより前記第１の記憶装置にセットされた変数を用いて変数の高次側より積和演算を繰り返す処理と、
最後の積和演算の加算を保留して前記演算ユニットにより乗算だけを行い、最後の乗算を、前記保留した加算項による値を加算項としてを含む積和演算に置き換えて当該積和演算を前記演算ユニットにより行う処理と、を含むデータ処理方法。
【請求項１２】
前記近似多項式をＧ（ｘ）＝ｃ０＊ｘ＋ｃ１＊ｘ＾３＋ｃ２＊ｘ＾５＋ｃ３＊ｘ＾７＋…とすると、原点位置の関数値が０で微係数１であることよりｃ０＝１であり、前記多項式近似をＧ（ｘ）＝ｘ（１＋ｘ＾２（ｃ１＋ｘ＾２（ｃ２＋ｘ＾２（ｃ３…））））の変数の高次側よりホーナー法により演算し、最後の積和演算は１＋ｘ＾２＊ａｎｓでありその第1項目の加算を保留して第２項目の乗算ａｎｓ＝ｘ＾２＊ａｎｓだけを行い、最後の乗算が置き換えられる積和演算は、ａｎｓ＝ｘ＋ｘ＊ａｎｓである請求項１１記載のデータプロセッサ。
【請求項１３】
コンピュータ装置によって実行される演算制御プログラムであって、前記演算制御プログラムは、原点位置の関数値が０で微係数が１となる関数の値を１変数の多項式近似でホーナー法により取得するデータ処理の制御記述を有し、前記データ処理は、
変数の値をコンピュータ装置の第１の記憶装置にセットする第１処理と、
コンピュータ装置の演算ユニットにより前記第１の記憶装置にセットされた変数を用いて変数の高次側より積和演算を繰り返す第２処理と、
最後の積和演算を留保し、最後の乗算を積和に置き換えて前記演算ユニットにより当該積和演算を行う第３処理とを含む演算処理プログラム。
【請求項１４】
前記関数の近似多項式をＧ（ｘ）＝ｃ０＊ｘ＋ｃ１＊ｘ＾３＋ｃ２＊ｘ＾５＋ｃ３＊ｘ＾７＋…とすると、原点位置の関数値が０で微係数１であることよりｃ０＝１であり、
前記第２処理ではｘの入力ｄ１に対して前記近似多項式をＧ（ｄ１）＝ｄ１（１＋ｄ１＾２（ｃ１＋ｄ１＾２（ｃ２＋ｄ１＾２（ｃ３…））））とし、入力ｄ１に対する前記関数の値をｄ１の高次側よりホーナー法により演算を行い、
前記第３処理において保留する最後の積和演算は１＋ｄ１＾２＊ａｎｓであり、最後の乗算に置き換えられる積和演算は、ａｎｓ＝ｄ１＋ｄ１＾３＊ａｎｓである請求項１３記載の演算処理プログラム。
【請求項１５】
コンピュータ装置によって実行される演算制御プログラムであって、前記演算制御プログラムは、原点位置の関数値が０で微係数が１となる関数の値を１変数の多項式近似でホーナー法により取得するデータ処理の制御記述を有し、前記データ処理は、
変数の値をコンピュータ装置の第１の記憶装置にセットする第１処理と、
コンピュータ装置の演算ユニットにより前記第１の記憶装置にセットされた変数を用いて変数の高次側より積和演算を繰り返す第２処理と、
最後の積和演算の加算を保留して前記演算ユニットにより乗算だけを行い、最後の乗算を、前記保留した加算項による値を加算項としてを含む積和演算に置き換えて当該積和演算を前記演算ユニットにより行う第３処理とを含む演算処理プログラム。
【請求項１６】
前記関数の近似多項式をＧ（ｘ）＝ｃ０＊ｘ＋ｃ１＊ｘ＾３＋ｃ２＊ｘ＾５＋ｃ３＊ｘ＾７＋…とすると、原点位置の関数値が０で微係数１であることよりｃ０＝１であり、
前記第２処理ではｘの入力ｄ１に対して前記近似多項式をＧ（ｄ１）＝ｄ１（１＋ｄ１＾２（ｃ１＋ｄ１＾２（ｃ２＋ｄ１＾２（ｃ３…））））とし、入力ｄ１に対する前記関数の値をｄ１の高次側よりホーナー法により演算を行い、
前記第３処理において最後の積和演算は１＋ｄ１＾２＊ａｎｓでありその第1項目の加算を保留して第２項目の乗算ａｎｓ＝ｄ１＾２＊ａｎｓだけを行い、最後の乗算が置き換えられる積和演算は、ａｎｓ＝ｄ１＋ｄ１＊ａｎｓである請求項１５記載の演算処理プログラム。
【請求項１７】
近似対象関数がｌｏｇ（１＋ｘ）であって、
近似多項式をＧ（ｘ）＝ｃ０＊ｘ＋ｃ１＊ｘ＾２＋ｃ２＊ｘ＾３＋ｃ３＊ｘ＾４＋…とすると、原点位置の関数値が０で微係数１であることよりｃ０＝１であり、ｘの入力ｄ１に対して前記近似多項式を
Ｇ（ｄ１）＝ｄ１（１＋ｄ１（ｃ１＋ｄ１（ｃ２＋ｄ１（ｃ３…））））とし、入力ｄ１に対する前記関数の値をｄ１の高次側よりホーナー法により演算し、保留する最後の積和演算は１＋ｄ１＊ａｎｓであり、最後の乗算に置き換えられる積和演算は、ａｎｓ＝ｄ１＋ｄ１＾２＊ａｎｓである請求項１記載のデータプロセッサ。
【請求項１８】
前記近似多項式をＧ（ｘ）＝ｃ０＊ｘ＋ｃ１＊ｘ＾２＋ｃ２＊ｘ＾３＋ｃ３＊ｘ＾４＋…とすると、原点位置の関数値が０で微係数１であることよりｃ０＝１であり、前記多項式近似をＧ（ｘ）＝ｘ（１＋ｘ（ｃ１＋ｘ（ｃ２＋ｘ（ｃ３…））））の変数の高次側よりホーナー法により演算し、最後の積和演算は１＋ｘ＊ａｎｓでありその第1項目の加算を保留して第２項目の乗算ａｎｓ＝ｘ＊ａｎｓだけを行い、最後の乗算が置き換えられる積和演算は、ａｎｓ＝ｘ＋ｘ＊ａｎｓである請求項５記載のデータプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、奇関数など原点位置の関数値が０で微係数が１となる関数の値を多項式近似でホーナー法により演算する制御技術に関する。
【背景技術】
【０００２】
原点位置の関数値が０となる関数には奇関数など多数ある。こういう関数Ｆ（ｘ）の近似多項式Ｇ（ｘ）を例えば多項式で実現すると、
Ｆ（ｘ）≒Ｇ（ｘ）＝ｃ０＊ｘ＋ｃ１＊ｘ＾３＋ｃ２＊ｘ＾５＋ｃ３＊ｘ＾７（＊は乗算記号、＾はべき乗記号である）となる。こういう関数Ｆ（ｘ）で、更に原点位置の微係数（微分係数）が１となる関数は数多くある。この場合、関数の値に占める割合もしくは値の精度という点で最重要係数である最も低次のべき乗の係数ｃ０が１も若しくは極端に１に近い値になる。この値を１．０ｆと記す。例えばｓｉｎ（ｘ）、ｓｉｎｈ（ｘ）、ｔａｎ（ｘ）、ｔａｎｈ（ｘ）などの関数がそうである。そのような関数の近似多項式をホーナー法で計算する場合には、前記多項式近似をＧ（ｘ）＝ｘ（１＋ｘ＾２（ｃ１＋ｘ＾２（ｃ２＋ｘ＾２（ｃ３））））として、変数の高次側より積和演算を繰り返す。例えば最初にａｎｓにｃ３を代入し（ａｎｓ＝ｃ３）、次にａｎｓにｃ２＋ｘ＾２＊ａｍｓを代入する（ａｎｓ＝ｃ２＋ｘ＾２＊ａｎｓ）といように計算を行う。最後の積和演算部分では、
ａｎｓ＝１．０ｆ＋ａｎｓ＊ｄ２（ｓｔｅｐ１）、
ａｎｓ＝ａｎｓ＊ｄ１（ｓｔｅｐ２）、
が行われる。前記ｄ２はｄ１＊ｄ１（ｄ２＝ｄ１＊ｄ１）であり、ｄ１は入力ｘである。
【０００３】
なお、多項式近似について記載された文献として非特許文献１がある。
【０００４】
【非特許文献１】CODY, W. J., AND WAITE, W. Software Manual for the Elementary Functions. Prentice-Hall, Englewood Cliffs, N.J., 1980.
【発明の開示】
【発明が解決しようとする課題】
【０００５】
本発明者は奇関数など原点位置での関数値が０で部分係数が１となる関数の演算精度を確保することについて検討した。これによれば、上記ホーナー法による演算では、先の積和演算結果を用いて次の低次の積和演算を行っていくから演算結果に丸め誤差が混入する。特に低次側の乗算ほど大きな丸め誤差を持つことになる。高次側の係数ほど小さく、また、値ｘは絶対値で１より小さい値を対象とするからである。最も大きな丸め誤差は、上記最後の演算ステップａｎｓ＝ａｎｓ＊ｄ１（ｓｔｅｐ２）で混入するおそれがある。これにより、上記演算方法では、真の値との差分が実質的に０になる可能性が低くなる。要するに、演算精度が低くなってします。
【０００６】
本発明の目的は、奇関数など原点位置の関数値が０で微係数が１となる関数の値を多項式近似で演算制御を行うときの演算精度を向上させることにある。
【０００７】
本発明の前記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００８】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。
【０００９】
〔１〕データプロセッサは、データ処理ユニットと、前記データ処理ユニットが実行する演算制御プログラムを保有するプログラムメモリと、前記演算制御プログラムにしたがって前記データ処理ユニットがアクセスするワークメモリと、を有する。前記データ処理ユニットは、前記演算制御プログラムに従って、原点位置の関数値が０で微係数が１となる関数の値を多項式近似でホーナー法により演算するとき、第１の態様として、最後の積和演算を留保し、最後の乗算を積和演算に置き換える。或いは、第２の態様として、最後の積和演算の加算を保留して乗算だけを行い、最後の乗算を、前記保留した加算項による値を加算項としてを含む積和演算に置き換える。
【００１０】
これによれば、最後の積和演算を留保することにより、最後の乗算を積和演算に置き換えることができ、最後の乗算を積和演算に置き換えることにより、丸め誤差を持たない変数の入力をそのまま関数の値の近似解に含めることが可能になり、それによって演算精度の向上に資することができる。
【００１１】
本発明の具体的な形態として、前記近似多項式は奇関数である。例えば、前記関数の近似多項式をＧ（ｘ）＝ｃ０＊ｘ＋ｃ１＊ｘ＾３＋ｃ２＊ｘ＾５＋ｃ３＊ｘ＾７＋…（＊は乗算記号、＾はべき乗記号である）とすると、原点位置の関数値が０で微係数１であるという条件により最重要係数ｃ０は丁度１（ｃ０＝１）であり、ｘの入力ｄ１に対して前記近似多項式をＧ（ｄ１）＝ｄ１（１＋ｄ１＾２（ｃ１＋ｄ１＾２（ｃ２＋ｄ１＾２（ｃ３…））））とし、入力ｄ１に対する前記関数の値をｄ１の高次側よりホーナー法により演算する。第１の態様では、保留する最後の積和演算はａｎｓ＝１＋ｄ１＾２＊ａｎｓであり、最後の乗算に置き換えられる積和演算は、ａｎｓ＝ｄ１＋ｄ１＾３＊ａｎｓ（ｓｔｅｐ３）となる。第２の態様では、最後の積和演算において加算を保留して行われる乗算を、ａｎｓ＝ａｎｓ＊ｄ１＾２（ｓｔｅｐ４）とし、最後の乗算に置き換えられる積和演算を、ａｎｓ＝ｄ１＋ａｎｓ＊ｄ１（ｓｔｅｐ５）とする。入力値ｄ１は丸め誤差を持たない。したがって、ｓｔｅｐ３又はｓｔｅｐ５で示される最後の計算結果の精度では、値ｄ１が威張ることになる。このｄ１は与えられた入力であり誤差を持たない。そしてｄ１に対する加算値ｄ１＾３＊ａｎｓ又はｄ１＊ａｎｓは相対的に小さい値である。よって、真の値との差分は小さくなる。これによって演算精度が大幅に向上することになる。
【００１２】
本発明の更に具体的な形態として、前記近似対象関数はｓｉｎ（ｘ）またはａｓｉｎ（ｘ）である。ａｓｉｎ（ｘ）はｓｉｎ（ｘ）の逆関数である。
【００１３】
本発明の更に別の形態として、第１の態様では、近似対象関数がｌｏｇ（１＋ｘ）であって、近似多項式をＧ（ｘ）＝ｃ０＊ｘ＋ｃ１＊ｘ＾２＋ｃ２＊ｘ＾３＋ｃ３＊ｘ＾４＋…とすると、原点位置の関数値が０で微係数１であることよりｃ０＝１であり、ｘの入力ｄ１に対して前記近似多項式をＧ（ｄ１）＝ｄ１（１＋ｄ１（ｃ１＋ｄ１（ｃ２＋ｄ１（ｃ３…））））とし、入力ｄ１に対する前記関数の値をｄ１の高次側よりホーナー法により演算し、保留する最後の積和演算は１＋ｄ１＊ａｎｓであり、最後の乗算に置き換えられる積和演算は、ａｎｓ＝ｄ１＋ｄ１＾２＊ａｎｓである。第２の態様では、前記近似多項式をＧ（ｘ）＝ｃ０＊ｘ＋ｃ１＊ｘ＾２＋ｃ２＊ｘ＾３＋ｃ３＊ｘ＾４＋…とすると、原点位置の関数値が０で微係数１であることよりｃ０＝１であり、前記多項式近似をＧ（ｘ）＝ｘ（１＋ｘ（ｃ１＋ｘ（ｃ２＋ｘ（ｃ３…））））の変数の高次側よりホーナー法により演算し、最後の積和演算は１＋ｘ＊ａｎｓでありその第1項目の加算を保留して第２項目の乗算ａｎｓ＝ｘ＊ａｎｓだけを行い、最後の乗算が置き換えられる積和演算は、ａｎｓ＝ｘ＋ｘ＊ａｎｓである。
【００１４】
〔２〕上記第１の態様によるデータ処理方法は、コンピュータ装置が演算制御プログラムを実行することにより、原点位置の関数値が０で微係数が１となる関数の値を１変数の多項式近似でホーナー法により取得する方法であって、変数の値をコンピュータ装置の第１の記憶装置にセットする処理と、コンピュータ装置の演算ユニットにより前記第１の記憶装置にセットされた変数を用いて変数の高次側より積和演算を繰り返す処理と、最後の積和演算を留保し、最後の乗算を積和に置き換えて前記演算ユニットにより当該積和演算を行う処理と、を含む。
【００１５】
上記第１の態様によるデータ処理方法の具体的な形態では、前記関数の近似多項式をＧ（ｘ）＝ｃ０＊ｘ＋ｃ１＊ｘ＾３＋ｃ２＊ｘ＾５＋ｃ３＊ｘ＾７＋…とすると、原点位置の関数値が０で微係数１であることよりｃ０＝１であり、ｘの入力ｄ１に対して前記近似多項式をＧ（ｄ１）＝ｄ１（１＋ｄ１＾２（ｃ１＋ｄ１＾２（ｃ２＋ｄ１＾２（ｃ３…））））とし、入力ｄ１に対する前記関数の値をｄ１の高次側よりホーナー法により演算し、保留する最後の積和演算は１＋ｄ１＾２＊ａｎｓであり、最後の乗算に置き換えられる積和演算は、ａｎｓ＝ｄ１＋ｄ１＾３＊ａｎｓである。
【００１６】
上記第２の態様によるデータ処理方法は、コンピュータ装置が演算制御プログラムを実行することにより、原点位置の関数値が０で微係数が１となる関数の値を１変数の多項式近似でホーナー法により取得する方法であって、変数の値をコンピュータ装置の第１の記憶装置にセットする処理と、コンピュータ装置の演算ユニットにより前記第１の記憶装置にセットされた変数を用いて変数の高次側より積和演算を繰り返す処理と、最後の積和演算の加算を保留して前記演算ユニットにより乗算だけを行い、最後の乗算を、前記保留した加算項による値を加算項としてを含む積和演算に置き換えて当該積和演算を前記演算ユニットにより行う処理と、を含む。
【００１７】
上記第２の態様によるデータ処理方法の具体的な形態では、前記近似多項式をＧ（ｘ）＝ｃ０＊ｘ＋ｃ１＊ｘ＾３＋ｃ２＊ｘ＾５＋ｃ３＊ｘ＾７＋…とすると、原点位置の関数値が０で微係数１であることよりｃ０＝１であり、前記多項式近似をＧ（ｘ）＝ｘ（１＋ｘ＾２（ｃ１＋ｘ＾２（ｃ２＋ｘ＾２（ｃ３…））））の変数の高次側よりホーナー法により演算し、最後の積和演算は１＋ｘ＾２＊ａｎｓでありその第1項目の加算を保留して第２項目の乗算ａｎｓ＝ｘ＾２＊ａｎｓだけを行い、最後の乗算が置き換えられる積和演算は、ａｎｓ＝ｘ＋ｘ＊ａｎｓである。
【００１８】
〔３〕コンピュータ装置によって実行される上記第１の態様による演算制御プログラムは、原点位置の関数値が０で微係数が１となる関数の値を１変数の多項式近似でホーナー法により取得するデータ処理の制御記述を有し、前記データ処理は、変数の値をコンピュータ装置の第１の記憶装置にセットする第１処理と、コンピュータ装置の演算ユニットにより前記第１の記憶装置にセットされた変数を用いて変数の高次側より積和演算を繰り返す第２処理と、最後の積和演算を留保し、最後の乗算を積和に置き換えて前記演算ユニットにより当該積和演算を行う第３処理とを含む。
【００１９】
上記第１の態様による演算制御プログラムの具体的な形態では、前記関数の近似多項式をＧ（ｘ）＝ｃ０＊ｘ＋ｃ１＊ｘ＾３＋ｃ２＊ｘ＾５＋ｃ３＊ｘ＾７とすると、原点位置の関数値が０で微係数１であることよりｃ０＝１であり、前記第２処理ではｘの入力ｄ１に対して前記近似多項式をＧ（ｄ１）＝ｄ１（１＋ｄ１＾２（ｃ１＋ｄ１＾２（ｃ２＋ｄ１＾２（ｃ３））））とし、入力ｄ１に対する前記関数の値をｄ１の高次側よりホーナー法により演算を行い、前記第３処理において保留する最後の積和演算は１＋ｄ１＾２＊ａｎｓであり、最後の乗算に置き換えられる積和演算は、ａｎｓ＝ｄ１＋ｄ１＾３＊ａｎｓである。
【００２０】
コンピュータ装置によって実行される上記第１の態様による演算制御プログラムは、原点位置の関数値が０で微係数が１となる関数の値を１変数の多項式近似でホーナー法により取得するデータ処理の制御記述を有し、前記データ処理は、変数の値をコンピュータ装置の第１の記憶装置にセットする第１処理と、コンピュータ装置の演算ユニットにより前記第１の記憶装置にセットされた変数を用いて変数の高次側より積和演算を繰り返す第２処理と、最後の積和演算の加算を保留して前記演算ユニットにより乗算だけを行い、最後の乗算を、前記保留した加算項による値を加算項としてを含む積和演算に置き換えて当該積和演算を前記演算ユニットにより行う第３処理とを含む。
【００２１】
上記第２の態様による演算制御プログラムの具体的な形態では、前記関数の近似多項式をＧ（ｘ）＝ｃ０＊ｘ＋ｃ１＊ｘ＾３＋ｃ２＊ｘ＾５＋ｃ３＊ｘ＾７＋…とすると、原点位置の関数値が０で微係数１であることよりｃ０＝１であり、前記第２処理ではｘの入力ｄ１に対して前記近似多項式をＧ（ｄ１）＝ｄ１（１＋ｄ１＾２（ｃ１＋ｄ１＾２（ｃ２＋ｄ１＾２（ｃ３）…）））とし、入力ｄ１に対する前記関数の値をｄ１の高次側よりホーナー法により演算を行い、前記第３処理において最後の積和演算は１＋ｄ１＾２＊ａｎｓでありその第1項目の加算を保留して第２項目の乗算ａｎｓ＝ｄ１＾２＊ａｎｓだけを行い、最後の乗算が置き換えられる積和演算は、ａｎｓ＝ｄ１＋ｄ１＊ａｎｓである。
【発明の効果】
【００２２】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記の通りである。
【００２３】
すなわち、奇関数など原点位置の関数値が０で微係数が１となる関数の値を多項式近似で演算制御を行うときの演算精度を向上させることができる。
【発明を実施するための最良の形態】
【００２４】
図１には本発明の一例に係るマイクロコンピュータが示される。同図に示されるマイクロコンピュータ１は、特に制限されないが、公知の半導体集積回路製造技術によって単結晶シリコンのような１個の半導体基板（半導体チップ）に形成される。このマイクロコンピュータ１は、データ処理ユニット２０として、例えば、整数演算を行なう中央処理装置（ＣＰＵ）２と共に、浮動小数点演算を行なう浮動小数点演算装置（ＦＰＵ）３を有する。更に、ディジタル信号処理で多用される積和演算に特化した積和演算装置４を有する。
【００２５】
中央処理装置２は内部アドレスバス１４及び内部データバス１３に結合される。中央処理装置２は、特に制限されないが、汎用レジスタや算術論理演算器で代表される演算部２Ａと、プログラムカウンタなどの制御用レジスタ群、そして命令のフェッチや解読並びに命令実行手順を制御したり演算制御を行う命令制御部２Ｂなどを有する。前記内部バス１３，１４には、前記ＣＰＵ２が実行する演算制御プログラムなどを保有するプログラムメモリ（ＰＧＭＭ）２１と、前記演算制御プログラムにしたがって前記ＣＰＵ２がアクセスするワークメモリ（ＷＲＫＭ）２２とを有する。中央処理装置２は、内部バス１３，１４に接続されたプログラムメモリ２１から命令をフェッチし、その命令を解読し、解読結果に応ずる制御信号を生成することにより、当該命令に応じたデータ処理を行う。
【００２６】
浮動小数点演算装置（ＦＰＵ）３及び積和演算装置４は内部データバス１３に結合される。浮動小数点演算装置（ＦＰＵ）３及び積和演算装置４は図示を省略する演算回路と共にデータレジスタを有し、このデータレジスタにメモリから演算データがロードされ、演算結果データは、そのレジスタからメモリにストアされる。前記ロード、ストアなどのためのアドレッシング動作はＣＰＵ２が行なう。したがって、ＦＰＵ３及び積和演算装置４はメモリアクセスのためのメモリアドレシング能力を備える必要はない。これは、ＦＰＵ３及び積和演算装置４によるメモリアドレシング回路の必要性を取り除いてチップ面積を節約するためである。
【００２７】
内部データバス１３及び内部アドレスバス１４はバスステートコントローラ６に結合される。マイクロコンピュータ１による外部アクセスは、前記バスステートコントローラ６に接続された外部バスインタフェース回路８で行う。外部バスインタフェース回路８は外部データバス１８及び外部アドレスバス１７に接続される。また、前記バスステートコントローラ６には、周辺データバス１６及び周辺アドレスバス１５を介して、例えば、クロック発生回路７、システムコントローラ１２、シリアルコミュニケーションインタフェースコントローラ（ＳＣＩ）９、タイマ１０及びＡ／Ｄコンバータ１１が結合される。それら周辺回路はデータレジスタや制御レジスタを有し、それらレジスタは前記バスステートコントローラ６を介してＣＰＵ２によってアクセスされる。
【００２８】
ＣＰＵ２が管理する内部メモリ空間、外部メモリ空間、前記ＳＣＩ９，タイマ１０，Ａ／Ｄコンバータ１１などの周辺回路に対するアドレスエリアの割り当ては予め決定されている。前記バスステートコントローラ６は、アクセスエリア毎にアクセスサイクル数やバス幅などがＣＰＵ２によって設定される図示を省略するバスコントロールレジスタを有し、ＣＰＵ２からのアクセスアドレスで指定されるメモリエリアに対するバス幅やアクセスサイクル数などのバス制御を行なって、バスサイクルを起動する。ＣＰＵ２からのアクセスの指示はバスコマンド２３としてバスステートコントローラ６に与えられる。バスコマンド２３にはアクセスサイズの指定や、リード、ライト、メモリアクセス等のストローブ信号が含まれる。
【００２９】
割込みコントローラ５は複数の割込み要求に対する優先制御やマスク制御などを行なって割込み信号２５をＣＰＵ２に与える。割込み要求は、バスステートコントローラ６からのバスエラー信号２４のほか、ＳＣＩ９、タイマ１０、Ａ／Ｄコンバータ１１そして外部からの図示を省略する割込み要求信号によって与えられる。
【００３０】
前記マイクロコンピュータ１は、特に制限されないが、クロック発生回路７から出力されるクロック信号ＣＬＫ０〜ＣＬＫ２に同期動作される。前記システムコントローラ１２はマイクロコンピュータ１の内蔵モジュールに対する動作停止の制御などを行う。
【００３１】
前記データ処理ユニット２０は、プログラムメモリ２１が保有する前記演算制御プログラムに従って、原点位置の関数値が０で微係数が１となる関数の値を多項式近似でホーナー法により演算を行う。例えば、ｓｉｎ（ｘ）又はａｓｉｎなどの奇関数の値をホーナー法によって求めるための制御記述を有する。この多項式近似による演算では、前記近似多項式は奇関数であり、例えば、前記関数の近似多項式をＧ（ｘ）＝ｃ０＊ｘ＋ｃ１＊ｘ＾３＋ｃ２＊ｘ＾５＋ｃ３＊ｘ＾７…（＊は乗算記号、＾はべき乗記号である）とすると、原点位置の関数値が０で微係数１であるという条件により最重要係数ｃ０は丁度１（ｃ０＝１）であり、ｘの入力ｄ１に対して前記近似多項式をＧ（ｄ１）＝ｄ１（１＋ｄ１＾２（ｃ１＋ｄ１＾２（ｃ２＋ｄ１＾２（ｃ３…））））とし、入力ｄ１に対する前記関数の値をホーナー法によりｄ１の高次側より順次積和演算を行っていく。この演算を行うとき、最後の積和演算の加算を保留して乗算だけを行い、最後の乗算を、前記保留した加算項による値を加算項としてを含む積和演算に置き換える。例えば、近似多項式を係数ｃ８まで考慮したとき多項式演算を、
Ｓ１：ａｎｓ＝ｃ３
Ｓ２：ａｎｓ＝ｃ２＋ｄ２＊ａｎｓ
Ｓ３：ａｎｓ＝ｃ１＋ｄ２＊ａｎｓ
Ｓ４：ａｎｓ＝ａｎｓ＊ｄ２
Ｓ５：ａｎｓ＝ｄ１＋ａｎｓ＊ｄ１
のように変更する。但し、ｄ２＝ｄ１＾２である。変更前の多項式演算は、
Ｓ１’：ａｎｓ＝ｃ３、
Ｓ２’：ａｎｓ＝ｃ２＋ａｎｓ＊ｄ２、
Ｓ３’：ａｎｓ＝ｃ１＋ａｎｓ＊ｄ２、
Ｓ４’：ａｎｓ＝１＋ａｎｓ＊ｄ２、
Ｓ５’：ａｎｓ＝ａｎｓ＊ｄ１、
である。すなわち、前者では、ｘの入力ｄ１に対する前記近似多項式を、
Ｇ（ｄ１）＝ｄ１＋ｄ１＾３（ｃ１＋ｄ１＾２（ｃ２＋ｄ１＾２（ｃ３）…）））のように変形している。要するに、最後の積和演算（Ｓ４’）において加算を保留して行われる乗算を、ａｎｓ＝ａｎｓ＊ｄ１＾２（Ｓ４）とし、最後の乗算（Ｓ５’）に置き換えられる積和演算を、ａｎｓ＝ｄ１＋ａｎｓ＊ｄ１（Ｓ５）とする。入力値ｄ１は丸め誤差を持たない。したがって、Ｓ５の最後の計算結果の精度では、値ｄ１が威張ることになる。このｄ１は与えられた入力であり誤差を持たない。そしてｄ１に対する加算値ｄ１＊ａｎｓは相対的に小さい値である。よって、真の値との差分は小さくなる。これによって演算精度が大幅に向上することになる。
【００３２】
図２には前記Ｓ１〜Ｓ５の多項式演算を採用したプログラム記述の例が示される。ここでは、浮動小数点数で値を返す逆正弦関数ａｓｉｎ（ｘ）を区間［−０．７１，０．７１］で多項式近似する場合の例である。近似多項式を係数ｃ８まで考慮している。図２の記法はＣ言語に準拠し、ｆｌｏａｔは単精度浮動小数点数を示す。図３には図２と同一処理をＣ言語による実際の記述法に則した別の記法で示す。図４には前記Ｓ１’〜Ｓ５’の多項式演算を採用したプログラム記述の例が示される。図５には図４と同一処理をＣ言語による実際の記述法に則した別の記法で示す。図２（図３）と図４（図５）とを比べれば明らかなように、両者の計算量はほぼ同じで、速度も同等である。
【００３３】
図６には図２（図３）に示されるプログラム記述による演算誤差を示し、図７には図４（図５）に示されるプログラム記述による演算誤差を示す。区間は共に［−０．７１，０．７１］である。各図に示される演算誤差は、倍精度で高精度に計算したａｓｉｎ（ｘ）を単精度に丸めた値との差分を示し、縦軸は誤差を示し、横軸はサンプルを示し、大凡１００サンプルとされる。同図からも図２（図３）に示されるプログラム記述による演算処理を行なうことにより高い演算精度が得られることが明らかである。
【００３４】
前記近似多項式をＧ（ｄ１）＝ｄ１＋ｄ１＾３（ｃ１＋ｄ１＾２（ｃ２＋ｄ１＾２（ｃ３）…）））のように変形して、入力ｄ１に対する前記関数の値をホーナー法によりｄ１の高次側より順次積和演算を行っていくとき、前記Ｓ４、Ｓ５に代えて、
Ｓ４’’：ａｎｓ＝ｄ１＋ａｎｓ＊ｄ１＾３
を採用してもよい。すなわち、最後の積和演算（Ｓ４’）を留保し、最後の乗算（Ｓ５’）を積和演算（Ｓ４’’）に置き換える。この場合も、入力値ｄ１は丸め誤差を持たず、ｄ１に対する加算値ｄ１＾３＊ａｎｓは相対的に小さい値であるから、真の値との差分は小さくなり、演算精度を大幅に向上させることができる。
【００３５】
図８には前記Ｓ４，Ｓ５に代えて前記Ｓ４’’の演算を行う多項式演算を採用したプログラム記述の例が示される。ここでは、浮動小数点数で値を返す逆正弦関数ａｓｉｎ（ｘ）を区間［−０．７１，０．７１］で多項式近似する場合の例である。近似多項式を係数ｃ８まで考慮している。図８の記法はＣ言語に準拠し、ｆｌｏａｔは単精度浮動小数点数を示す。図９には図８と同一処理をＣ言語による実際の記述法に則した別の記法で示す。
【００３６】
以上の説明では奇関数ａｓｉｎ（ｘ）を例にして示したが、奇関数でないｌｏｇ（１＋ｘ）でも同様な算法が可能である。この場合の近似多項式は
Ｇ（ｘ）＝ｃ０＊ｘ＋ｃ１＊ｘ＾２＋ｃ２＊ｘ＾３＋ｃ３＊ｘ＾４…
Ｇ（ｄ１）＝ｄ１（１＋ｄ１（ｃ１＋ｄ１（ｃ２＋ｄ１（ｃ３…）））
となる。そのときの演算制御プログラム記述の例を図１０に示す。図１０の記法はＣ言語に準拠し、ｆｌｏａｔは単精度浮動小数点数を示す。図１１には図１０と同一処理をＣ言語による実際の記述法に則した別の記法で示す。図１０、図１１においてＳ１０は本来積和の筈だがそれを乗算にし、Ｓ１１は本来乗算の筈だがそれを積和にして、演算精度を向上させている。
【００３７】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。本発明は、ｓｉｎ（ｘ）、ａｓｉｎ（ｘ）、ｌｏｇ（１＋ｘ）以外にも、ｓｉｎｈ（ｘ）、ｔａｎ（ｘ）、ｔａｎｈ（ｘ）などの関数の値を演算するのに適用することができる。また、多項近似式の項数もしくは係数の数は３や８に限定されず適宜変更可能である。
【００３８】
また、データプロセッサは１チップのマイクロコンピュータに限定されず、マルチチップのプロセッサであってもよい。したがって、個別チップ化されたプログラムメモリ、ワークメモリ及び演算処理ユニットを回路基板に搭載してデータプロセッサを構成してもよい。
【図面の簡単な説明】
【００３９】
【図１】本発明の一例に係るマイクロコンピュータのブロック図である。
【図２】Ｓ１〜Ｓ５の多項式演算を採用したプログラム記述を例示する説明図である。
【図３】図２と同一処理をＣ言語による実際の記述法に則して示す説明図である。
【図４】Ｓ１’〜Ｓ５’の多項式演算を採用したプログラム記述を例示する説明図である。
【図５】図４と同一処理をＣ言語による実際の記述法に則して示す説明図である。
【図６】図２（図３）に示されるプログラム記述による演算誤差を示す特性図である。
【図７】図４（図５）に示されるプログラム記述による演算誤差を示す特性図である。
【図８】Ｓ４，Ｓ５に代えて前記Ｓ４’’の演算を行う多項式演算を採用したプログラム記述を例示する説明図である。
【図９】図８と同一処理をＣ言語による実際の記述法に則して示す説明図である。
【図１０】ｌｏｇ（１＋ｘ）の値を多項式近似で演算するときの演算制御プログラム記述を例示する説明図である。
【図１１】図１０と同一処理をＣ言語による実際の記述法に則して示す説明図である。
【符号の説明】
【００４０】
１  マイクロコンピュータ
２  中央処理装置
３  浮動小数点演算装置
４  積和演算装置
２０  データ処理ユニット
２１  プログラムメモリ
２２  ワークメモリ
【図１】
2006059085.tif 000003
【図２】
2006059085.tif 000004
【図３】
2006059085.tif 000005
【図４】
2006059085.tif 000006
【図５】
2006059085.tif 000007
【図６】
2006059085.tif 000008
【図７】
2006059085.tif 000009
【図８】
2006059085.tif 000010
【図９】
2006059085.tif 000011
【図１０】
2006059085.tif 000012
【図１１】
2006059085.tif 000013