JP2006059084A - データプロセッサ、データ処理方法及び演算処理プログラム - Google Patents
データプロセッサ、データ処理方法及び演算処理プログラム Download PDFInfo
- Publication number
- JP2006059084A JP2006059084A JP2004239566A JP2004239566A JP2006059084A JP 2006059084 A JP2006059084 A JP 2006059084A JP 2004239566 A JP2004239566 A JP 2004239566A JP 2004239566 A JP2004239566 A JP 2004239566A JP 2006059084 A JP2006059084 A JP 2006059084A
- Authority
- JP
- Japan
- Prior art keywords
- value
- cst
- polynomial
- constant
- acos
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Images
Landscapes
- Complex Calculations (AREA)
Abstract
【課題】 逆余弦関数acos(x)に対しては1近傍の値を高精度に得る。
【解決手段】 データプロセッサ(1)は、データ処理ユニット(20)を有し、演算制御プログラムを実行するデータ処理ユニットは、前記演算制御プログラムに従って、入力xに対して関数acos(x)の値の計算を、多項式F(x)と定数Cを用いてacos(x)=F(1−x)*sqrt(C*(1−x))で行うとき、F(1−x)の多項式計算をホーナー法で行い、その最後の加算を留保して前記多項式F(x)の定数項の値cstと加算項の値αとを分けてストアし、更に、sqrt(C*(1−x))をニュートン法を用いて被加算項の値sq1と加算項の値εとに分けてストアし、(cst+α)*(sq1+ε)の展開式cst*sq1+α*sq1+cst*ε+α*εの全部又は先頭から一部を用いて、xの入力に対する関数acos(x)の値を求める演算を行う。
【選択図】 図1
Description
本発明は、逆余弦関数asoc(x)の値を求めるための演算制御技術に関し、例えばマイクロコンピュータに適用して有効な技術に関する。
sin(x)、cos(x)、exp(x)、log(x)などの数学関数は応用分野によっては多用される。それら関数の値を演算するプログラムはCなど高級言語の標準ライブラリに含まれている。そのようなプログラムでは高速かつ高精度な近似関数による演算制御を行うことができる。近似関数を作る場合、近似区間を定め、その区間内で目標関数を精度よく近似する多項式や有理式を決め、その近似式で値を計算する。また近似区間外はその近似区間内へ還元して値を計算する。上記sin(x)などに対しては容易に多項式近似関数などを導出でき、また、その近似関数で得られる関数値は真の値に極めて近いものとなる。しかしながら、逆余弦関数acos(x)に対しては1近傍の近似式を作るのが難しい。その関数は、1近傍で正の値が急激に0に落ちていく関数形状であり、多項式で近似するのにはなじみ難い。多項近似について記載された文献として例えば非特許文献1がある。
CODY, W. J., AND WAITE, W. Software Manual for the Elementary Functions. Prentice-Hall, Englewood Cliffs, N.J., 1980.
本発明者は逆余弦関数acos(x)に対しては1近傍の近似式について検討した。1近傍におけるacosの関数形状は平方根の関数sqrt(x)に近似している。F(y)=acos(1−y)/sqrt(y)とおく。F(y)は多項近似することができる。sqrt(y)の関数演算命令は多くのプロセッサの命令セットに含まれているから、その値は容易に計算できる。そうすると、acos(1−y)=F(y)*sqrt(y)の演算によってacos(1−y)の値を演算できることになる。*は乗算記号である。
しかしながら、単にそれだけでは演算精度に問題のあることが本発明者によって明らかにされた。すなわち、計算を出力のデータ型以上の精度で行い、最後に出力のデータ型に丸めるというやり方を行えば精度上問題はないのであるが、出力のデータ型で計算しなければならない(または拡張精度の演算命令はない)という制約があると、F(y)の計算とsqrt(y)の計算で各々丸め誤差が発生し、その後の乗算で更に丸め誤差が発生するからである。
本発明の目的は、逆余弦関数acos(x)に対しては1近傍の値を高精度に得ることができる演算制御技術を提供することにある。
本発明の前記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。
〔1〕データプロセッサは、データ処理ユニットと、前記データ処理ユニットが実行する演算制御プログラムを保有するプログラムメモリと、前記演算制御プログラムにしたがって前記データ処理ユニットがアクセスするワークメモリと、を有する。前記データ処理ユニットは、前記演算制御プログラムに従って、入力xに対して関数acos(x)の値の計算を、多項式F(x)と定数Cを用いてacos(x)=F(1−x)*sqrt(C*(1−x))で行うとき、F(1−x)の多項式計算をホーナー法で行い、その最後の加算を留保して前記多項式F(x)の定数項の値cstと加算項の値αとを分けてストアし、更に、sqrt(C*(1−x))をニュートン法を用いて被加算項の値sq1と加算項の値εとに分けてストアし、(cst+α)*(sq1+ε)の展開式cst*sq1+α*sq1+cst*ε+α*εの全部又は先頭から一部を用いて、xの入力に対する関数acos(x)の値を求める演算を行う。要するに、F(1−y)=cst+α、sqrt(C*(1−x))=sq1+εのように、F(1−y)とsqrt(C*(1−x))を各々2数の和とする。acos(x)の1近傍における関数形状は特にC=2の平方根の関数sqrt(C*(1−x))に近似しているから、C=2とすれば、cst=1.0として差し支えない。αはホーナー法により、εはニュートン法により、夫々計算精度の高い比較的小さな値とされる。このとき、上記恒等式cst*sq1+α*sq1+cst*ε+α*εについて見ると、式の4項は左側から大きい順に並んでいる。この式を計算してacos(x)の値を求める。このとき、右側の方から加算していく。そうすると、丸めの効果が次の加算に反映されず、最終結果は高精度が期待される。尚、式の最後の項α*εは値が極端に小さく、加算しなくてもなんら支障はない。
本発明の具体的な形態として、ホーナー法によるF(1−x)の多項式計算において、多項式をF(y)=c0+c1*y+c2*y^2+c3*y^3…とすると、前記多項式を、F(y)=c0+y*(c1+y*(c2+y*(c3…)))とし、入力yに対する前記多項式の値をyの高次側よりホーナー法により演算し、保留する最後の積和演算をc0+y*ansとし、c0=cst、y*ans=αとする。c0には演算誤差はない。
また、前記データ処理ユニットは平方根の関数sqrtの演算処理にてsqrt(C*y)の値sqを演算し、その値sqに対してニュートン法を適用し、sq=0.5*(sq+C*y/sq)をsq=sq+0.5*((C*y−sq*sq)sq)と変形し、sq1=sq、ε=0.5*((C*y−sq*sq)sq)とする。
本発明の更に具体的な形態として、前記定数Cが2であり、前記多項式F(x)の値cstは1.0である。前記定数Cを1とするときは、前記多項式F(x)の定数係数を相対的に大きな値root2Kと相対的に小さい値root2fに分け、前記値cstとして前記値root2Kを採用し、前記値αに前記値root2fを含める。
〔2〕データ処理方法は、コンピュータ装置が演算制御プログラムを実行することにより、入力xに対して関数acos(x)の値を、多項式F(x)と定数Cを用いてacos(x)=F(1−x)*sqrt(C*(1−x))の計算により取得する方法であって、F(1−x)の多項式計算をホーナー法で行い、その最後の加算を留保して前記多項式F(x)の定数項の値cstと加算項の値αとを分けてストアする処理と、sqrt(C*(1−x))をニュートン法を用いて被加算項の値sq1と加算項の値εとに分けてストアする処理と、(cst+α)*(sq1+ε)の展開式cst*sq1+α*sq1+cst*ε+α*εの全部又は先頭から一部を用いて、xの入力に対する関数acos(x)の値を演算する処理と、を含む。
〔3〕コンピュータ装置によって実行される演算制御プログラムは、入力xに対して関数acos(x)の値のを、多項式F(x)と定数Cを用いてacos(x)=F(1−x)*sqrt(C*(1−x))の計算により取得するデータ処理の制御記述を有し、前記データ処理は、F(1−x)の多項式計算をホーナー法で行い、その最後の加算を留保して前記多項式F(x)の定数項の値cstと加算項の値αとを分けてストアする処理と、sqrt(C*(1−x))をニュートン法を用いて被加算項の値sq1と加算項の値εとに分けてストアする処理と、(cst+α)*(sq1+ε)の展開式cst*sq1+α*sq1+cst*ε+α*εの全部又は先頭から一部を用いて、xの入力に対する関数acos(x)の値を演算する処理と、を含む。
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記の通りである。
すなわち、逆余弦関数acos(x)に対しては1近傍の値を高精度に得ることができる。
図1には本発明の一例に係るマイクロコンピュータが示される。同図に示されるマイクロコンピュータ1は、特に制限されないが、公知の半導体集積回路製造技術によって単結晶シリコンのような1個の半導体基板(半導体チップ)に形成される。このマイクロコンピュータ1は、データ処理ユニット20として、例えば、整数演算を行なう中央処理装置(CPU)2と共に、浮動小数点演算を行なう浮動小数点演算装置(FPU)3を有する。更に、ディジタル信号処理で多用される積和演算に特化した積和演算装置4を有する。
中央処理装置2は内部アドレスバス14及び内部データバス13に結合される。中央処理装置2は、特に制限されないが、汎用レジスタや算術論理演算器で代表される演算部2Aと、プログラムカウンタなどの制御用レジスタ群、そして命令のフェッチや解読並びに命令実行手順を制御したり演算制御を行う命令制御部2Bなどを有する。前記内部バス13,14には、前記CPU2が実行する演算制御プログラムなどを保有するプログラムメモリ(PGMM)21と、前記演算制御プログラムにしたがって前記CPU2がアクセスするワークメモリ(WRKM)22とを有する。中央処理装置2は、内部バス13,14に接続されたプログラムメモリ21から命令をフェッチし、その命令を解読し、解読結果に応ずる制御信号を生成することにより、当該命令に応じたデータ処理を行う。
浮動小数点演算装置(FPU)3及び積和演算装置4は内部データバス13に結合される。浮動小数点演算装置(FPU)3及び積和演算装置4は図示を省略する演算回路と共にデータレジスタを有し、このデータレジスタにメモリから演算データがロードされ、演算結果データは、そのレジスタからメモリにストアされる。前記ロード、ストアなどのためのアドレッシング動作はCPU2が行なう。したがって、FPU3及び積和演算装置4はメモリアクセスのためのメモリアドレシング能力を備える必要はない。これは、FPU3及び積和演算装置4によるメモリアドレシング回路の必要性を取り除いてチップ面積を節約するためである。
内部データバス13及び内部アドレスバス14はバスステートコントローラ6に結合される。マイクロコンピュータ1による外部アクセスは、前記バスステートコントローラ6に接続された外部バスインタフェース回路8で行う。外部バスインタフェース回路8は外部データバス18及び外部アドレスバス17に接続される。また、前記バスステートコントローラ6には、周辺データバス16及び周辺アドレスバス15を介して、例えば、クロック発生回路7、システムコントローラ12、シリアルコミュニケーションインタフェースコントローラ(SCI)9、タイマ10及びA/Dコンバータ11が結合される。それら周辺回路はデータレジスタや制御レジスタを有し、それらレジスタは前記バスステートコントローラ6を介してCPU2によってアクセスされる。
CPU2が管理する内部メモリ空間、外部メモリ空間、前記SCI9,タイマ10,A/Dコンバータ11などの周辺回路に対するアドレスエリアの割り当ては予め決定されている。前記バスステートコントローラ6は、アクセスエリア毎にアクセスサイクル数やバス幅などがCPU2によって設定される図示を省略するバスコントロールレジスタを有し、CPU2からのアクセスアドレスで指定されるメモリエリアに対するバス幅やアクセスサイクル数などのバス制御を行なって、バスサイクルを起動する。CPU2からのアクセスの指示はバスコマンド23としてバスステートコントローラ6に与えられる。バスコマンド23にはアクセスサイズの指定や、リード、ライト、メモリアクセス等のストローブ信号が含まれる。
割込みコントローラ5は複数の割込み要求に対する優先制御やマスク制御などを行なって割込み信号25をCPU2に与える。割込み要求は、バスステートコントローラ6からのバスエラー信号24のほか、SCI9、タイマ10、A/Dコンバータ11そして外部からの図示を省略する割込み要求信号によって与えられる。
前記マイクロコンピュータ1は、特に制限されないが、クロック発生回路7から出力されるクロック信号CLK0〜CLK2に同期動作される。前記システムコントローラ12はマイクロコンピュータ1の内蔵モジュールに対する動作停止の制御などを行う。
前記データ処理ユニット20は、プログラムメモリ21が保有する前記演算制御プログラムに従って、入力xに対して関数acos(x)の値の計算を、多項式F(x)と定数Cを用いてacos(x)=F(1−x)*sqrt(C*(1−x))で行うとき、F(1−x)の多項式計算をホーナー法で行い、その最後の加算を留保して前記多項式F(x)の定数項の値cstと加算項の値αとを分けてストアし、更に、sqrt(C*(1−x))をニュートン法を用いて被加算項の値sq1と加算項の値εとに分けてストアし、(cst+α)*(sq1+ε)の展開式cst*sq1+α*sq1+cst*ε+α*εの全部又は先頭から一部を用いて、xの入力に対する関数acos(x)の値を求める演算を行う。要するに、F(1−x)=cst+α、sqrt(C*(1−x))=sq1+εのように、F(1−x)とsqrt(C*(1−x))を各々2数の和とする。acos(x)の1近傍における関数形状は特にC=2の平方根の関数sqrt(C*(1−x))に近似しているから、C=2とすれば、cst=1.0として差し支えない。αはホーナー法により、εはニュートン法により、夫々計算精度の高い比較的小さな値とされる。このとき、上記恒等式cst*sq1+α*sq1+cst*ε+α*εについて見ると、式の4項は左側から大きい順に並んでいる。この式を計算してacos(x)の値を求める。このとき、右側の方から加算していく。そうすると、丸めの効果が次の加算に反映されず、最終結果は高精度が期待される。尚、式の最後の項α*εは値が極端に小さく、加算しなくてもなんら支障はない。
以下に上記演算制御方法を説明する。ここでは、演算速度を確保しつつ、演算精度を大幅に向上する方法を提案する。単精度浮動小数点数で値を返すacos(x)を単精度浮動小数点演算で計算する例を説明するが、倍精度浮動小数点数で値を返すacos(x)を倍精度浮動小数点演算で計算する場合にもそのまま適用することができる。
まず、基本の発想を示すために
A=(1+α)*(sq+ε)…式1
の式を考える。α、sq、εは正の値である。式1の右辺を展開すると、
A=sq+α*sq+ε+α*ε…式2
のようになる。ここで、αとsqは1よりも1桁以上小さく、εはsqよりも8桁以上小さいとする。値は総て単精度浮動小数点数に格納されるものとする。値Aを式1の通りに計算すると、2つの加算で丸め誤差が発生し、最後の乗算でさらに丸め誤差が発生する。しかし、式2で計算し、加算を右側から行うとすれば、誤差の発生は最小限に抑えられる。式2の4項は大きい順に配置されていて、左側2つの項の比がかなり大きいからである。さらに最右翼の加算は省略できるであろう。最右翼の項は、最終のAの値に寄与できない程度に小さいからである。
A=(1+α)*(sq+ε)…式1
の式を考える。α、sq、εは正の値である。式1の右辺を展開すると、
A=sq+α*sq+ε+α*ε…式2
のようになる。ここで、αとsqは1よりも1桁以上小さく、εはsqよりも8桁以上小さいとする。値は総て単精度浮動小数点数に格納されるものとする。値Aを式1の通りに計算すると、2つの加算で丸め誤差が発生し、最後の乗算でさらに丸め誤差が発生する。しかし、式2で計算し、加算を右側から行うとすれば、誤差の発生は最小限に抑えられる。式2の4項は大きい順に配置されていて、左側2つの項の比がかなり大きいからである。さらに最右翼の加算は省略できるであろう。最右翼の項は、最終のAの値に寄与できない程度に小さいからである。
以上を基本の発想として、acos(x)の高精度算法を考える。近似すべき目標関数を、
F(y)=acos(1−y)/sqrt(C*y)…式3
とする。C=2である。本明細書においてy=1−xとする。式3の分子のsqrt()の中のCを2とすると、分母と分子の関数形状は殆ど等しくなる。要するに、acos(1−y)に原点位置で接する放物線がsqr(2*y)となる。従って、F(y)の定数係数を1.0に固定した近似多項式を導出できる。例えばF(y)=c0+c1*y+c2*y^2+c3*y^3…とすると、前記近似多項式は図2の係数を持つ。近似区間は[0〜0.3]である。図2において最初の値は限界誤差(絶対)、残りが係数で逆順に表示されている。最下段が定数係数である。
F(y)=acos(1−y)/sqrt(C*y)…式3
とする。C=2である。本明細書においてy=1−xとする。式3の分子のsqrt()の中のCを2とすると、分母と分子の関数形状は殆ど等しくなる。要するに、acos(1−y)に原点位置で接する放物線がsqr(2*y)となる。従って、F(y)の定数係数を1.0に固定した近似多項式を導出できる。例えばF(y)=c0+c1*y+c2*y^2+c3*y^3…とすると、前記近似多項式は図2の係数を持つ。近似区間は[0〜0.3]である。図2において最初の値は限界誤差(絶対)、残りが係数で逆順に表示されている。最下段が定数係数である。
図3はF(y)を倍精度で計算したときの誤差グラフを示し、図4はacos(1−x)を倍精度で計算したときの誤差グラフを示す。表示区間は近似区間と同じで、[0〜0.3]である。共に絶対誤差で表示している。
さて、F(y)をホーナー法で計算する場合、F(y)=c0+y*(c1+y*(c2+y*(c3+y*(c4+y*(c5)))))とすると、このF(y)を素直にホーナー法で計算すれば以下に示す演算、
ans=c5、
ans=c4+ans*y、
ans=c3+ans*y、
ans=c2+ans*y、
ans=c1+ans*y、
ans=1.0+ans*y、
が行われる。この最後の積和の計算(ans=1.0+ans*y)を留保する。代わりにα=ans*yを求めておく。このαは上記式1、式2のαに丁度対応している。これにより、式2で計算するacos(x)の半分の準備が整う。
ans=c5、
ans=c4+ans*y、
ans=c3+ans*y、
ans=c2+ans*y、
ans=c1+ans*y、
ans=1.0+ans*y、
が行われる。この最後の積和の計算(ans=1.0+ans*y)を留保する。代わりにα=ans*yを求めておく。このαは上記式1、式2のαに丁度対応している。これにより、式2で計算するacos(x)の半分の準備が整う。
次に、sq=sqrt(2*y)の計算を行う。このsqrt(2*y)はIEEEEの規格通りの計算をするものとする。結果の値は単精度浮動小数点の値として最善のものになる。しかし、それ以上にsqの精度を確保したい。そこでニュートン法を適用して精度を上げる。すなわち、
sq=0.5*(sq+2*y/sq)
とし、これをsq=sq+0.5*((2*y−sq*sq)sq)と変形する。変形前の算法であれば新しいsqは前のsqと同じ値となり無意味である。なぜ同じ値かといえば、以前のsqが最善の近似値だったからである。一方、変形後の算法で第2項目の加算を留保すれば精度がほぼ2倍になる。つまり、ε=(2*y―sq*sq)/(2*sq)とsqの2つで新しいsqを考えるということである。なお、上記変形式において、(2*y−sq*sq)は2*yを演算した後で(2*y)−sq*sqを積和命令で計算するものとし、積和命令はsq*sqの積の結果を総て和(実際は差)の演算に参加させるという前提が必要である。
sq=0.5*(sq+2*y/sq)
とし、これをsq=sq+0.5*((2*y−sq*sq)sq)と変形する。変形前の算法であれば新しいsqは前のsqと同じ値となり無意味である。なぜ同じ値かといえば、以前のsqが最善の近似値だったからである。一方、変形後の算法で第2項目の加算を留保すれば精度がほぼ2倍になる。つまり、ε=(2*y―sq*sq)/(2*sq)とsqの2つで新しいsqを考えるということである。なお、上記変形式において、(2*y−sq*sq)は2*yを演算した後で(2*y)−sq*sqを積和命令で計算するものとし、積和命令はsq*sqの積の結果を総て和(実際は差)の演算に参加させるという前提が必要である。
これで、式2で計算するacos(x)の残りの半分の準備が整ったことになり、これらを用いて式2の演算を行う。
図5にはacos(x)の値を求めるための上記演算を採用したプログラム記述の例が示される。図5の記法はC言語に準拠し、floatは単精度浮動小数点数を示す。図6には図5と同一処理をC言語による実際の記述法に則した別の記法で示す。図5、6においてy2=y+yは、前記式3のsqrt(C*y)においてC=2としたとき、2*yを便宜上y+y(=y2)として表現したものである。図7にはホーナー法における最後の加算演算の留保とニュートン法による演算を行わない場合の比較例としてのプログラム記述の例が示される。図8には図7と同一処理をC言語による実際の記述法に則した別の記法で示す。
図5、6に代表される演算方法による演算結果に対する演算精度の評価結果について説明する。図5、6に代表される演算方法をnewacos法、図7、8に代表される比較例にかかる演算方法をoldacos法と称する。評価を行うのに、近似区間[0.7〜1.0]において0.002刻みにサンプル点xを定め、new_acos(x)−(float)acos(x)のような差分を調べた。すなわち、倍精度の浮動小数点数の値を返すライブラリ関数acos(x)が返した値を単精度浮動小数点数に丸めたしたもの((float)acos(x))を基準値とし、newacos法による関数値(new_acos(x))と差分を取った。その結果は図9に示される。oldacos法による関数値(old_acos(x))と差分も取った。その結果は図10に示される。oldacos法は、1/3のサンプル点で値が1つずれている。一方newacos法は総てのサンプル点で基準の(float)acos(x)と同じであった。[0.8〜1.0]を0.001刻みとした別のサンプル点群で調べた結果を図11と図12に示すが、この場合も上記と別のサンプル点群で調べても、同様な傾向であった。図11、図12の結果は図9、図10の結果に比べて、誤差が少し増えているoldacos(x)では、値が2つずれているサンプル点が現れている。また、newacos(x)では、値が1つずれているものが現れている。しかし基本的には図9、図10と同様の傾向といえる。いずれにしても、式2に従って精度確保を目指したnewacos法による演算制御によれば極めて良好な演算精度を得ることができる。誤差の混入を最小限におさえた演算制御方法だからである。
次に演算速度について考察する。前述の図7及び図8のold_acosfの関数は前記式1にしたがって計算するコードで、単にホーナー法で計算しているだけである。図5及び図6のnew_acosfの関数が前記式2に従って演算を行うためのコードである。2つの関数、値の定義/使用の主系列部分を普通の位置に、そうでない系列部分は右にずらせて配置している。入力はyである。sqは平方根演算で求まるが、平方根演算命令はあり、その完了クロック数は12とする。積和命令や乗算命令の完了クロック数は3とする。関数old_acosではホーナー法の計算部分が演算主系列を構成する。前の積和演算の結果を次の積和演算で使用するリカレンスの演算構造である。上の関数の演算部分のクロック数は18(=6*3)となる。
関数new_acosでは、平方根演算とその後の除算部分が演算主系列に含まれる。そして除算の完了を12クロックとすれば、下の関数の演算部分のクロック数は33(=2*12+3*3)となる。
従って、演算主系列の意味でのクロック数は15違うことになる。実際に2つのコードをある2並列のスーパースカラプロセッサで実行させ、関数としてのクロック数を計ると、25クロックと40クロックであった。つまり机上計算の差と丁度同じになった。
以上の説明では、acos=F(1−x)/sqrt(2*(1−x))として説明した。この場合多項式F(x)の定数係数を1.0とできた。しかしsqrtにおけるCは2である必要はない。例えば1でもいい。この場合多項式F(x)の定数係数はsqrt(2)に近い値となる。これを相対的に大きい値root2kと相対的に小さいroot2の2つの和で管理するとし、ホーナー法の計算を
ans=c5
ans=c4+ans*y
ans=c3+ans*y
ans=c2+ans*y
ans=c1+ans*y
α=root2f+ans*y
ans=root2k+α
とし、最後の演算を留保する。更に式1の関係を
A=(root2k+α)*(sq+ε)
のように変更し、対応する式2の関係を以下の
A=root2k*sq+α*sq+root2k*ε+α*ε
のように変形する。そして、この式を右側から加算していく。勿論、最右の項は無視してもいい。
ans=c5
ans=c4+ans*y
ans=c3+ans*y
ans=c2+ans*y
ans=c1+ans*y
α=root2f+ans*y
ans=root2k+α
とし、最後の演算を留保する。更に式1の関係を
A=(root2k+α)*(sq+ε)
のように変更し、対応する式2の関係を以下の
A=root2k*sq+α*sq+root2k*ε+α*ε
のように変形する。そして、この式を右側から加算していく。勿論、最右の項は無視してもいい。
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
例えば、データプロセッサは1チップのマイクロコンピュータに限定されず、マルチチップのプロセッサであってもよい。したがって、個別チップ化されたプログラムメモリ、ワークメモリ及び演算処理ユニットを回路基板に搭載してデータプロセッサを構成してもよい。
1 マイクロコンピュータ
2 中央処理装置
3 浮動小数点演算装置
4 積和演算装置
20 データ処理ユニット
21 プログラムメモリ
22 ワークメモリ
2 中央処理装置
3 浮動小数点演算装置
4 積和演算装置
20 データ処理ユニット
21 プログラムメモリ
22 ワークメモリ
Claims (11)
- データ処理ユニットと、前記データ処理ユニットが実行する演算制御プログラムを保有するプログラムメモリと、前記演算制御プログラムにしたがって前記データ処理ユニットがアクセスするワークメモリと、を有し、
前記データ処理ユニットは、前記演算制御プログラムに従って、入力xに対して関数acos(x)の値の計算を、多項式F(x)と定数Cを用いてacos(x)=F(1−x)*sqrt(C*(1−x))で行うとき(但し*は乗算記号)、F(1−x)の多項式計算をホーナー法で行い、その最後の加算を留保して前記多項式F(x)の定数項の値cstと加算項の値αとを分けてストアし、更に、sqrt(C*(1−x))をニュートン法を用いて被加算項の値sq1と加算項の値εとに分けてストアし、(cst+α)*(sq1+ε)の展開式cst*sq1+α*sq1+cst*ε+α*εの全部又は先頭から一部を用いて、xの入力に対する関数acos(x)の値を演算するデータプロセッサ。 - ホーナー法によるF(1−x)の多項式計算において、多項式をF(y)=c0+c1*y+c2*y^2+c3*y^3…とすると(但しy=1−x)、前記多項式を、F(y)=c0+y*(c1+y*(c2+y*(c3…)))とし、入力yに対する前記多項式の値をyの高次側よりホーナー法により演算し、保留する最後の積和演算をc0+y*ansとし、c0=cst、y*ans=αとする請求項1記載のデータプロセッサ。
- 前記データ処理ユニットは平方根の関数sqrtの演算処理にてsqrt(C*y)の値sqを演算し、その値sqに対してニュートン法を適用し、sq=0.5*(sq+C*y/sq)をsq=sq+0.5*((C*y−sq*sq)sq)と変形し、sq1=sq、ε=0.5*((C*y−sq*sq)sq)とする請求項1記載のデータプロセッサ。
- 前記定数Cが2であり、前記多項式F(x)の値cstは1.0である請求項1記載のデータプロセッサ。
- 前記定数Cは1であり、前記多項式F(x)の値を相対的に大きな値root2Kと相対的に小さい値root2fに分け、前記値cstとして前記値root2Kを採用し、前記値αに前記値root2fを含める請求項1記載のデータプロセッサ。
- コンピュータ装置が演算制御プログラムを実行することにより、入力xに対して関数acos(x)の値を、多項式F(x)と定数Cを用いてacos(x)=F(1−x)*sqrt(C*(1−x))の計算により取得するデータ処理方法であって、
F(1−x)の多項式計算をホーナー法で行い、その最後の加算を留保して前記多項式F(x)の定数項の値cstと加算項の値αとを分けてストアする処理と、
sqrt(C*(1−x))をニュートン法を用いて被加算項の値sq1と加算項の値εとに分けてストアする処理と、
(cst+α)*(sq1+ε)の展開式cst*sq1+α*sq1+cst*ε+α*εの全部又は先頭から一部を用いて、xの入力に対する関数acos(x)の値を演算する処理と、を含むデータ処理方法。 - 前記定数Cが2であり、前記多項式F(x)の値cstは1.0である請求項6記載のデータ処理方法。
- 前記定数Cは1であり、前記多項式F(x)の定数係数を相対的に大きな値root2Kと相対的に小さい値root2fに分け、前記値cstとして前記値root2Kを採用し、前記値αに前記値root2fを含める請求項6記載のデータ処理方法。
- コンピュータ装置によって実行される演算制御プログラムであって、入力xに対して関数acos(x)の値を、多項式F(x)と定数Cを用いてacos(x)=F(1−x)*sqrt(C*(1−x))の計算により取得するデータ処理の制御記述を有し、前記データ処理は、
F(1−x)の多項式計算をホーナー法で行い、その最後の加算を留保して前記多項式F(x)の定数項の値cstと加算項の値αとを分けてストアする処理と、
sqrt(C*(1−x))をニュートン法を用いて被加算項の値sq1と加算項の値εとに分けてストアする処理と、
(cst+α)*(sq1+ε)の展開式cst*sq1+α*sq1+cst*ε+α*εの全部又は先頭から一部を用いて、xの入力に対する関数acos(x)の値を演算する処理と、を含む演算処理プログラム。 - 前記定数Cが2であり、前記多項式F(x)の値cstは1.0である請求項9記載の演算処理プログラム。
- 前記定数Cは1であり、前記多項式F(x)の定数係数を相対的に大きな値root2Kと相対的に小さい値root2fに分け、前記値cstとして前記値root2Kを採用し、前記値αに前記値root2fを含める請求項9記載の演算処理プログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004239566A JP2006059084A (ja) | 2004-08-19 | 2004-08-19 | データプロセッサ、データ処理方法及び演算処理プログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004239566A JP2006059084A (ja) | 2004-08-19 | 2004-08-19 | データプロセッサ、データ処理方法及び演算処理プログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2006059084A true JP2006059084A (ja) | 2006-03-02 |
Family
ID=36106511
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2004239566A Withdrawn JP2006059084A (ja) | 2004-08-19 | 2004-08-19 | データプロセッサ、データ処理方法及び演算処理プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2006059084A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20160120249A (ko) * | 2015-04-07 | 2016-10-17 | 비반테 코포레이션 | 수학적 함수를 연산하는 시스템 및 방법 |
-
2004
- 2004-08-19 JP JP2004239566A patent/JP2006059084A/ja not_active Withdrawn
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20160120249A (ko) * | 2015-04-07 | 2016-10-17 | 비반테 코포레이션 | 수학적 함수를 연산하는 시스템 및 방법 |
JP2016201108A (ja) * | 2015-04-07 | 2016-12-01 | ビバンテ コーポレーション | 数学的関数を計算するためのシステム及び方法 |
KR102503498B1 (ko) * | 2015-04-07 | 2023-02-23 | 비반테 코포레이션 | 수학적 함수를 연산하는 시스템 및 방법 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US4573118A (en) | Microprocessor with branch control | |
US7010558B2 (en) | Data processor with enhanced instruction execution and method | |
EP0075593A4 (en) | MICRO-PROGRAMMABLE BIT WAFER PROCESSOR FOR SIGNAL PROCESSING APPLICATIONS. | |
JPH113254A (ja) | モジュール構成可能なフルチップパワープロファイラ | |
US9996345B2 (en) | Variable length execution pipeline | |
Wang et al. | A novel parallel architecture for template matching based on zero-mean normalized cross-correlation | |
US10983755B2 (en) | Transcendental calculation unit apparatus and method | |
US6674435B1 (en) | Fast, symmetric, integer bezier curve to polygon conversion | |
JP2006059084A (ja) | データプロセッサ、データ処理方法及び演算処理プログラム | |
Berekovic et al. | A core generator for fully synthesizable and highly parameterizable RISC-cores for system-on-chip designs | |
JP2006323710A (ja) | データプロセッサ、データ処理方法及び演算制御プログラム | |
Nolting et al. | Evaluation of a generic radix-4 cordic coprocessor tightly coupled with a generic vliw-simd asip architecture | |
Amano et al. | Performance and cost analysis of time-multiplexed execution on the dynamically reconfigurable processor | |
Kaneko et al. | A VLSI RISC with 20-MFLOPS peak, 64-bit floating-point unit | |
US6625632B1 (en) | Method and apparatus for square root generation using bit manipulation and instruction interleaving | |
JPH11232077A (ja) | 情報処理システム | |
Nabeel et al. | Silicon-proven ASIC design for the polynomial operations of Fully Homomorphic Encryption | |
JP2006059085A (ja) | データプロセッサ、データ処理方法及び演算処理プログラム | |
Si et al. | Optimizing Behavioral Near On-Chip Memory Computing Systems | |
US20220382514A1 (en) | Control logic for configurable and scalable multi-precision operation | |
Arnold et al. | A Flexible analytic model for a dynamic task-scheduling unit for heterogeneous mpsocs | |
Oh et al. | RF2P: A Lightweight RISC Processor Optimized for Rapid Migration from IEEE-754 to Posit | |
Prasad et al. | Siracusa: A 16 nm Heterogenous RISC-V SoC for Extended Reality With At-MRAM Neural Engine | |
Palmer | The hybrid architecture parallel fast fourier transform (hapfft) | |
Abderazek et al. | Scalable core-based methodology and synthesizable core for systematic design environment in multicore SoC (MCSoC) |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A300 | Application deemed to be withdrawn because no request for examination was validly filed |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20071106 |