(57)【要約】【課題】  集積化に適した構成で、低コストで誤差関数の演算の高速化を図ることができる誤差関数演算装置及び誤差関数演算方法を提供する。【解決手段】  変数をＴ（正の実数）、次数をＭ（Ｍは０以上の整数）とする誤差関数ＦＭ（Ｔ）を求める処理を行う誤差関数演算装置は、係数テーブル１０と、演算部１５０とを含む。係数テーブル１０は、前記誤差関数ＦＭ（Ｔ）のｎ（ｎは自然数）次の多項式近似により得られる、予め決められたＴ０について求められたＦＭ＋ｉ（Ｔ０）／ＦＭ（Ｔ０）（ｉは１〜ｎのうち少なくとも１つの整数）の値又はその定数倍の値を記憶する。演算部１５０は、係数テーブル１０からＦＭ＋ｉ（Ｔ０）／ＦＭ（Ｔ０）の値又はその定数倍の値を読み出し、前記誤差関数ＦＭ（Ｔ）の値を求める処理の少なくとも一部を、該ＦＭ＋ｉ（Ｔ０）／ＦＭ（Ｔ０）の値又はその定数倍の値を用いた固定小数点演算により行う。【選択図】      図８
2005157876.tif 000002
【特許請求の範囲】
【請求項１】
変数をＴ（正の実数）、次数をＭ（Ｍは０以上の整数）とする誤差関数ＦＭ（Ｔ）を求める処理を行う誤差関数演算装置であって、
前記誤差関数ＦＭ（Ｔ）のｎ（ｎは自然数）次の多項式近似により得られる、予め決められたＴ０について求められたＦＭ＋ｉ（Ｔ０）／ＦＭ（Ｔ０）（ｉは１〜ｎのうち少なくとも１つの整数）の値又はその定数倍の値を記憶する係数テーブルと、
前記係数テーブルからＦＭ＋ｉ（Ｔ０）／ＦＭ（Ｔ０）の値又はその定数倍の値を読み出し、前記誤差関数ＦＭ（Ｔ）の値を求める処理の少なくとも一部を、該ＦＭ＋ｉ（Ｔ０）／ＦＭ（Ｔ０）の値又はその定数倍の値を用いた固定小数点演算により行う演算部と、
を含むことを特徴とする誤差関数演算装置。
【請求項２】
請求項１において、
前記誤差関数ＦＭ（Ｔ）は、下記の（１）式により定義され、
前記演算部は、
下記の（２）式の少なくとも一部を求める処理を、固定小数点演算により行うことを特徴とする誤差関数演算装置。
【数１】
2005157876.tif 000024
【数２】
2005157876.tif 000025
【請求項３】
請求項１又は２において、
前記ＦＭ＋ｉ（Ｔ０）／ＦＭ（Ｔ０）の値又はその定数倍の値は、固定小数点値であることを特徴とする誤差関数演算装置。
【請求項４】
請求項２又は３において、
前記係数テーブルは、
ＦＭ（Ｔ０）の値又はその定数倍の値を記憶し、
前記演算部は、
前記係数テーブルから読み出されたＦＭ＋ｉ（Ｔ０）／ＦＭ（Ｔ０）の値又はその定数倍の値を用いた固定小数点演算の演算結果と、前記ＦＭ（Ｔ０）の値又はその定数倍の値とに基づいて、前記誤差関数ＦＭ（Ｔ）の値を求める処理を行うことを特徴とする誤差関数演算装置。
【請求項５】
請求項２乃至４のいずれかにおいて、
前記係数テーブルは、
その記憶内容が書き換え可能なメモリにより構成されることを特徴とする誤差関数演算装置。
【請求項６】
請求項５において、
外部メモリに記憶されたデータを前記係数テーブルに転送する転送制御部を含み、
前記外部メモリは、
ＦＬ（Ｔ０）（Ｌは０〜Ｍの整数）の値又はその定数倍、ＦＬ＋ｉ（Ｔ０）／ＦＬ（Ｔ０）（ｉは１〜ｎの整数）の値又はその定数倍の値を記憶し、
前記転送制御部は、
前記外部メモリに記憶されたＦＮ（Ｔ０）の値又はその定数倍、ＦＮ＋ｉ（Ｔ０）／ＦＮ（Ｔ０）（Ｎは０〜Ｍのいずれか１つの整数）の値又はその定数倍の値を読み出して、該ＦＮ＋ｉ（Ｔ０）／ＦＮ（Ｔ０）の値又はその定数倍の値を前記係数テーブルに書き込み、
前記演算部は、
前記誤差関数ＦＭ（Ｔ）の値を求める処理の少なくとも一部を、前記係数テーブルに書き込まれた前記ＦＮ＋ｉ（Ｔ０）／ＦＮ（Ｔ０）の値又はその定数倍の値を用いた固定小数点演算により行うことを特徴とする誤差関数演算装置。
【請求項７】
請求項５において、
前記係数テーブルは、
予め決められたＴ０について求められたＦＭ＋ｎ（Ｔ０）の値を記憶し、
前記演算部は、
前記係数テーブルからＦＭ＋ｎ（Ｔ０）の値を読み出し、前記誤差関数ＦＭ（Ｔ）の値を求める処理の少なくとも一部を、下記の（３）式により求められたＦＭ＋ｎ−１（Ｔ０）、・・・、ＦＭ（Ｔ０）の値と前記係数テーブルからのＦＭ＋ｎ（Ｔ０）の値とを用いた固定小数点演算により行うことを特徴とする誤差関数演算装置。
【数３】
2005157876.tif 000026
【請求項８】
請求項１乃至７のいずれかにおいて、
前記係数テーブルに記憶された値を読み出すためのインデックスを生成するデコーダを含み、
前記デコーダは、
浮動小数点表示された前記変数Ｔの指数部と前記変数Ｔの仮数部の上位ビットとに基づいて前記インデックスを生成することを特徴とする誤差関数演算装置。
【請求項９】
請求項１乃至８のいずれかにおいて、
前記多項式近似は、
テイラー近似であることを特徴とする誤差関数演算装置。
【請求項１０】
変数をＴ（正の実数）、次数をＭ（Ｍは０以上の整数）とした場合に、下記の（４）式により定義され誤差関数ＦＭ（Ｔ）を求める処理を行うための誤差関数演算方法であって、
前記誤差関数ＦＭ（Ｔ）のｎ（ｎは自然数）次の多項式近似により得られる、予め決められたＴ０について求められたＦＭ＋ｉ（Ｔ０）／ＦＭ（Ｔ０）（ｉは１〜ｎのうち少なくとも１つの整数）の値又はその定数倍の値を記憶する係数テーブを準備し、
演算部が、前記係数テーブルからＦＭ＋ｉ（Ｔ０）／ＦＭ（Ｔ０）の値又はその定数倍の値を読み出し、下記の（５）式の少なくとも一部を求める処理を、固定小数点演算により行うことを特徴とする誤差関数演算方法。
【数４】
2005157876.tif 000027
【数５】
2005157876.tif 000028
【請求項１１】
変数をＴ（正の実数）、次数をＭ（Ｍは０以上の整数）とした場合に、下記の（６）式により定義され誤差関数ＦＭ（Ｔ）を求める処理を行うための誤差関数演算方法であって、
前記誤差関数ＦＭ（Ｔ）のｎ（ｎは自然数）次の多項式近似により得られる、予め決められたＴ０について求められたＦＬ（Ｔ０）（Ｌは０〜Ｍの整数）の値又はその定数倍、ＦＬ＋ｉ（Ｔ０）／ＦＬ（Ｔ０）（ｉは１〜ｎの整数）の値又はその定数倍の値を記憶する外部メモリを準備し、
前記外部メモリに記憶されたＦＮ（Ｔ０）の値又はその定数倍、ＦＮ＋ｉ（Ｔ０）／ＦＮ（Ｔ０）（Ｎは０〜Ｍのいずれか１つの整数）の値又はその定数倍の値を読み出して、該ＦＮ＋ｉ（Ｔ０）／ＦＮ（Ｔ０）の値又はその定数倍の値を係数テーブルに書き込み、
演算部が、下記の（７）式の少なくとも一部を求める処理を、前記係数テーブルに書き込まれた前記ＦＮ＋ｉ（Ｔ０）／ＦＮ（Ｔ０）の値又はその定数倍の値を用いた固定小数点演算により行うことを特徴とする誤差関数演算方法。
【数６】
2005157876.tif 000029
【数７】
2005157876.tif 000030
【請求項１２】
変数をＴ（正の実数）、次数をＭ（Ｍは０以上の整数）とした場合に、下記の（８）式により定義され誤差関数ＦＭ（Ｔ）を求める処理を行うための誤差関数演算方法であって、
前記誤差関数ＦＭ（Ｔ）のｎ（ｎは自然数）次の多項式近似により得られる、予め決められたＴ０について求められたＦＭ＋ｎ（Ｔ０）（ｎは自然数）の値を記憶する係数テーブルを準備し、
演算部が、下記の（９）式の少なくとも一部を求める処理を、下記の（１０）式により求められたＦＭ＋ｎ−１（Ｔ０）、・・・、ＦＭ（Ｔ０）の値と前記係数テーブルからのＦＭ＋ｎ（Ｔ０）の値とを用いた固定小数点演算により行うことを特徴とする誤差関数演算方法。
【数８】
2005157876.tif 000031
【数９】
2005157876.tif 000032
【数１０】
2005157876.tif 000033
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、誤差関数演算装置及び誤差関数演算方法に関する。
【背景技術】
【０００２】
製薬や材料開発等の分野において、新素材の開発には分子レベルでの設計が必要な場合がある。この場合、分子の電子状態を把握することで、設計した分子の性質が確認される。電子の状態は、電子の波動関数を求めることで把握される。このような分子の電子状態を求めるには、種々の手法がある。その１つに、非経験的分子軌道計算（ab initio molecular orbital calculations）を用いる非経験的分子軌道法がある。非経験的分子軌道法では、シュレディンガー方程式を出発点として、実験的なデータを加味することなく理論的に分子の電子状態が求められる。
【０００３】
非経験的分子軌道法は、最も単純なHartree-Fock法（以下ＨＦ法と略す。）を用いた場合でも、計算する分子のサイズの４乗に比例する膨大な計算量が必要とされる。近年の計算機の発達や並列化技術の進歩にも関わらず、大きなサイズの分子の設計は困難な状況である。このような非経験的分子軌道計算において最も時間を要するのが、二電子積分を計算してフォック行列を生成する部分である。そのため、非経験的分子軌道法の演算を高速に処理する手法として、二電子積分の演算を高速化する手法が種々提案されている。
【０００４】
二電子積分は、例えば４つのガウス型関数により決定される。これらガウス型関数それぞれの軌道量子ベクトルをａ、ｂ、ｃ、ｄとすると、ある軌道量子ベクトルにおいて、ベクトル３成分（ｘ成分、ｙ成分、ｚ成分）の和を軌道量子数と呼び、軌道量子数が０、１、２、・・・、の軌道をそれぞれｓ軌道、ｐ軌道、ｄ軌道、・・・、と呼ぶ。二電子積分は、その計算を決定する４つの軌道量子ベクトルａ、ｂ、ｃ、ｄごとの軌道量子数が表す軌道を用いて[pp|ss]（或いは（pp,ss）、（pp|ss））、[dd|ss]（或いは（dd,ss）、（dd|ss）のように表記される。
【０００５】
二電子積分は、初期積分[0]（０）〜[0]（ｍ）の算出と、[0]（０）〜[0]（ｍ）と係数を用いた漸化計算による二電子積分の算出とに分けられる。ここで[0]は[ss|ss]を意味し、ｍは二電子積分[ij|kl]の各軌道の主軌道量子数の総和を意味する。例えば非特許文献１には、初期積分[0]（ｍ）の演算を高速化する手法について開示されている。
【非特許文献１】高島  一、外９名，「分子軌道専用計算機MOEngineにおける初期積分[0]（ｍ）の計算手法」，JCPE Journal，日本化学プログラム交換機構，２００１年１０月，第１３巻，第４号，ｐ．２４１−２５０
【発明の開示】
【発明が解決しようとする課題】
【０００６】
ところで二電子積分計算は、小原のアルゴリズム（”General recurrence formulas for molecular integrals over Cartesian Gaussian function”， S.Obara and A.Saika, J.Chem.Phys.Vol98 no.3, August 1988等を参照）を適用することにより漸化計算で表される。ところが、この計算では、複数の積和演算を並列的に計算することにより高速化できるが、初期積分の計算部分は並列性が少なく、高速化のボトルネックとなる。
【０００７】
即ち、小原のアルゴリズムのプログラム構造は、図１３に示すように４重ループ構造の初期積分の計算の後に漸化計算を行う処理を、外側の４重ループで繰り返すことで二電子積分の値を求めるものである。ここで、４重ループ構造の初期積分の計算には、”Efficient recursive computation of molecular integrals over Cartesian Gaussian functions ”（S.Obara and A.Saika, J.Chem.Phys.84(7), 1 April 1986)（文献Ａ）や非特許文献１に記載されているように、指数関数や誤差関数の演算処理が行われる。従って、指数関数や誤差関数の演算を高速化することで二電子積分計算を高速化できる。特に誤差関数の演算は８重ループ繰り返されるため、誤差関数の演算を高速化することで、二電子積分計算の高速化を実現しやすい。
【０００８】
また大型のコンピュータに限らずパーソナルコンピュータを用いて分子の電子状態の計算、更には分子のシミュレーションを実行できるように、集積化（ＩＣ化）に適した構成で、誤差関数の演算処理を実現できることが望ましい。
【０００９】
更にガウス関数を適用すると、必ず誤差関数を演算する必要がある。任意の関数はガウス関数の重ね合わせで表現できることから、分子設計の分野に限らず他の分野においても、誤差関数を高速に演算する誤差関数演算装置の応用範囲は広い。
【００１０】
以上のように、誤差関数の演算処理を、小規模な構成で、かつ低コストで実現できることが望ましい。
【００１１】
しかしながら非特許文献１に記載されているように、高精度な誤差関数の演算処理は、浮動小数点演算により行わざるを得ない。そのため浮動小数点演算を実現する回路の規模が大きくなってしまう。また、参照テーブルもまた、浮動小数点表示されたデータを記憶する必要があるため、参照テーブルの容量が大きくなる。
【００１２】
本発明は、以上のような技術的課題に鑑みてなされたものであり、その目的とするところは、集積化に適した構成で、低コストで誤差関数の演算の高速化を図ることができる誤差関数演算装置及び誤差関数演算方法を提供することにある。
【課題を解決するための手段】
【００１３】
上記課題を解決するために本発明は、変数をＴ（正の実数）、次数をＭ（Ｍは０以上の整数）とする誤差関数ＦＭ（Ｔ）を求める処理を行う誤差関数演算装置であって、前記誤差関数ＦＭ（Ｔ）のｎ（ｎは自然数）次の多項式近似により得られる、予め決められたＴ０について求められたＦＭ＋ｉ（Ｔ０）／ＦＭ（Ｔ０）（ｉは１〜ｎのうち少なくとも１つの整数）の値又はその定数倍の値を記憶する係数テーブルと、前記係数テーブルからＦＭ＋ｉ（Ｔ０）／ＦＭ（Ｔ０）の値又はその定数倍の値を読み出し、前記誤差関数ＦＭ（Ｔ）の値を求める処理の少なくとも一部を、該ＦＭ＋ｉ（Ｔ０）／ＦＭ（Ｔ０）の値又はその定数倍の値を用いた固定小数点演算により行う演算部とを含む誤差関数演算装置に関係する。
【００１４】
また本発明に係る誤差関数演算装置では、前記誤差関数ＦＭ（Ｔ）は、（１）式により定義され、前記演算部は、（２）式の少なくとも一部を求める処理を、固定小数点演算により行うことができる。
【００１５】
また本発明に係る誤差関数演算装置では、前記ＦＭ＋ｉ（Ｔ０）／ＦＭ（Ｔ０）の値又はその定数倍の値は、固定小数点値であってもよい。
【００１６】
本発明においては、係数テーブルに、ＦＭ＋ｉ（Ｔ０）／ＦＭ（Ｔ０）の値又はその定数倍の値を記憶させるようにしている。ＦＭ＋ｉ（Ｔ０）／ＦＭ（Ｔ０）の値又はその定数倍の値は固定小数点データとすることができ、誤差関数の値を求めるための処理の一部を、固定小数点演算により行うようにすることで、浮動小数点演算を実現する場合に比べて、誤差関数演算装置の構成を簡素化できる。
【００１７】
特に（１）式により定義される誤差関数の性質を利用すれば、係数テーブルに記憶されるＦＭ＋ｉ（Ｔ０）／ＦＭ（Ｔ０）の値又はその定数倍の値を必ず固定小数点データとすることができ、係数テーブルの小容量化を実現できるようになる。その結果、求める誤差関数の値の精度を下げることなく、集積化に適した構成で誤差関数を求めるための処理を行う誤差関数演算装置を提供できる。
【００１８】
また（１）式で定義される誤差関数を用いることで、小原のアルゴリズムに適用可能な誤差関数演算装置を実現できる。
【００１９】
また本発明に係る誤差関数演算装置では、前記係数テーブルは、ＦＭ（Ｔ０）の値又はその定数倍の値を記憶し、前記演算部は、前記係数テーブルから読み出されたＦＭ＋ｉ（Ｔ０）／ＦＭ（Ｔ０）の値又はその定数倍の値を用いた固定小数点演算の演算結果と、前記ＦＭ（Ｔ０）の値又はその定数倍の値とに基づいて、前記誤差関数ＦＭ（Ｔ）の値を求める処理を行うことができる。
【００２０】
本発明によれば、浮動小数点演算を行うことなく誤差関数の値を求めるための処理を行うことができるので、誤差関数演算装置の構成を小型化して低コスト化を図ることができる。
【００２１】
また本発明に係る誤差関数演算装置では、前記係数テーブルは、その記憶内容が書き換え可能なメモリにより構成されてもよい。
【００２２】
また本発明に係る誤差関数演算装置では、外部メモリに記憶されたデータを前記係数テーブルに転送する転送制御部を含み、前記外部メモリは、ＦＬ（Ｔ０）（Ｌは０〜Ｍの整数）の値又はその定数倍、ＦＬ＋ｉ（Ｔ０）／ＦＬ（Ｔ０）（ｉは１〜ｎの整数）の値又はその定数倍の値を記憶し、前記転送制御部は、前記外部メモリに記憶されたＦＮ（Ｔ０）の値又はその定数倍、ＦＮ＋ｉ（Ｔ０）／ＦＮ（Ｔ０）（Ｎは０〜Ｍのいずれか１つの整数）の値又はその定数倍の値を読み出して、該ＦＮ＋ｉ（Ｔ０）／ＦＮ（Ｔ０）の値又はその定数倍の値を前記係数テーブルに書き込み、前記演算部は、前記誤差関数ＦＭ（Ｔ）の値を求める処理の少なくとも一部を、前記係数テーブルに書き込まれた前記ＦＮ＋ｉ（Ｔ０）／ＦＮ（Ｔ０）の値又はその定数倍の値を用いた固定小数点演算により行うことができる  本発明によれば、係数テーブルの容量を小さくでき、誤差関数を求めるための処理を高速に行うことができる誤差関数演算装置を低コストで提供できるようになる。
【００２３】
また本発明に係る誤差関数演算装置では、前記係数テーブルは、予め決められたＴ０について求められたＦＭ＋ｎ（Ｔ０）の値を記憶し、前記演算部は、前記係数テーブルからＦＭ＋ｎ（Ｔ０）の値を読み出し、前記誤差関数ＦＭ（Ｔ）の値を求める処理の少なくとも一部を、（３）式により求められたＦＭ＋ｎ−１（Ｔ０）、・・・、ＦＭ（Ｔ０）の値と前記係数テーブルからのＦＭ＋ｎ（Ｔ０）の値とを用いた固定小数点演算により行うことができる。
【００２４】
本発明によれば、係数テーブルの容量を最小限にでき、より一層より低コストな誤差関数演算装置を提供できるようになる。
【００２５】
また本発明に係る誤差関数演算装置では、前記係数テーブルに記憶された値を読み出すためのインデックスを生成するデコーダを含み、前記デコーダは、浮動小数点表示された前記変数Ｔの指数部と前記変数Ｔの仮数部の上位ビットとに基づいて前記インデックスを生成することができる。
【００２６】
本発明によれば、倍精度浮動小数点表示の変数が入力された場合でも浮動小数点演算を行うことなく係数テーブルにアクセスできるようになり、より一層より低コストな誤差関数演算装置を提供できるようになる。また、変数の値が小さいほどインデックスを作成する変数値の刻み幅を小さくする場合に、簡素な構成で、係数テーブルにアクセスできるようになる。
【００２７】
また本発明に係る誤差関数演算装置では、前記多項式近似は、テイラー近似であってもよい。
【００２８】
また本発明は、変数をＴ（正の実数）、次数をＭ（Ｍは０以上の整数）とした場合に、（４）式により定義され誤差関数ＦＭ（Ｔ）を求める処理を行うための誤差関数演算方法であって、前記誤差関数ＦＭ（Ｔ）のｎ（ｎは自然数）次の多項式近似により得られる、予め決められたＴ０について求められたＦＭ＋ｉ（Ｔ０）／ＦＭ（Ｔ０）（ｉは１〜ｎのうち少なくとも１つの整数）の値又はその定数倍の値を記憶する係数テーブを準備し、演算部が、前記係数テーブルからＦＭ＋ｉ（Ｔ０）／ＦＭ（Ｔ０）の値又はその定数倍の値を読み出し、（５）式の少なくとも一部を求める処理を、固定小数点演算により行う誤差関数演算方法に関係する。
【００２９】
また本発明は、変数をＴ（正の実数）、次数をＭ（Ｍは０以上の整数）とした場合に、（６）式により定義され誤差関数ＦＭ（Ｔ）を求める処理を行うための誤差関数演算方法であって、前記誤差関数ＦＭ（Ｔ）のｎ（ｎは自然数）次の多項式近似により得られる、予め決められたＴ０について求められたＦＬ（Ｔ０）（Ｌは０〜Ｍの整数）の値又はその定数倍、ＦＬ＋ｉ（Ｔ０）／ＦＬ（Ｔ０）（ｉは１〜ｎの整数）の値又はその定数倍の値を記憶する外部メモリを準備し、前記外部メモリに記憶されたＦＮ（Ｔ０）の値又はその定数倍、ＦＮ＋ｉ（Ｔ０）／ＦＮ（Ｔ０）（Ｎは０〜Ｍのいずれか１つの整数）の値又はその定数倍の値を読み出して、該ＦＮ＋ｉ（Ｔ０）／ＦＮ（Ｔ０）の値又はその定数倍の値を係数テーブルに書き込み、演算部が、（７）式の少なくとも一部を求める処理を、前記係数テーブルに書き込まれた前記ＦＮ＋ｉ（Ｔ０）／ＦＮ（Ｔ０）の値又はその定数倍の値を用いた固定小数点演算により行う誤差関数演算方法に関係する。
【００３０】
また本発明は、変数をＴ（正の実数）、次数をＭ（Ｍは０以上の整数）とした場合に、（８）式により定義され誤差関数ＦＭ（Ｔ）を求める処理を行うための誤差関数演算方法であって、前記誤差関数ＦＭ（Ｔ）のｎ（ｎは自然数）次の多項式近似により得られる、予め決められたＴ０について求められたＦＭ＋ｎ（Ｔ０）（ｎは自然数）の値を記憶する係数テーブルを準備し、演算部が、（９）式の少なくとも一部を求める処理を、（１０）式により求められたＦＭ＋ｎ−１（Ｔ０）、・・・、ＦＭ（Ｔ０）の値と前記係数テーブルからのＦＭ＋ｎ（Ｔ０）の値とを用いた固定小数点演算により行う誤差関数演算方法に関係する。
【発明を実施するための最良の形態】
【００３１】
以下、本発明の実施の形態について図面を用いて詳細に説明する。なお、以下に説明する実施の形態は、特許請求の範囲に記載された本発明の内容を不当に限定するものではない。また以下で説明される構成のすべてが本発明の必須構成要件であるとは限らない。
【００３２】
以下では、二電子積分の計算に用いられる誤差関数について説明するが、本発明は二電子積分の計算に限定されるものではない。
【００３３】
１．  誤差関数
非経験的分子軌道法の解法として、ＨＦ法を用いる方法が知られている。ＨＦ法を用いた非経験的分子軌道法の計算において、計算時間の９５〜９９％を占めるのが二電子積分の計算を行ってフォック行列を生成するステップであることが知られている。また二電子積分の計算は、基底関数の数の４乗に比例する計算量が必要であるため、基底関数の数が多くなる（系のサイズが大きくなる、若しくは精度の高い基底関数を使う）に従って計算時間の割合が大きくなる傾向にある。そのため、非経験的分子軌道法による分子軌道計算の高速化を実現するには、二電子積分の計算の高速化が重要である。
【００３４】
二電子積分の計算を高速化するアルゴリズムとして、小原のアルゴリズムが知られている（文献Ａ等を参照）。小原のアルゴリズムは、入力データからいくつかの初期パラメータを計算し、初期積分を求めた後、それらを用いて目的の二電子積分まで漸化計算により求めるものである。そのため、小原のアルゴリズムは、図１３に示したように初期積分計算部分と、漸化計算部分とに分けられる。従って、並列性が少ない初期積分の計算部分を高速化することが、二電子積分の計算の高速化につながることがわかる。
【００３５】
初期積分[0]（Ｍ）は、（１１）式で表される。
【００３６】
【数１１】
2005157876.tif 000003
【００３７】
ここで、ＧＡＢＣＤ、ＦＭ（Ｔ）は（１２）式、（１３）式で表される。
【００３８】
【数１２】
2005157876.tif 000004
【００３９】
【数１３】
2005157876.tif 000005
【００４０】
ここで、α、β、γ、δは二電子積分[ij|kl]のｉ，ｊ，ｋ，ｌそれぞれのガウス関数の軌道因子であり正の実数値である。Ａ、Ｂ、Ｃ、Ｄはそれぞれの座標である。ＦＭ（Ｔ）は分子軌道計算において誤差関数と呼ばれる。
【００４１】
【数１４】
2005157876.tif 000006
【００４２】
誤差関数ＦＭ（Ｔ）は、（１４）式で表されるＴ（正の実数）を入力変数とし、二電子積分[ij|kl]の各軌道の主軌道量子数の総和であるＭ（０以上の整数）を次数とする。
【００４３】
小原のアルゴリズムのプログラム構造は、図１３に示すように４重ループ構造の初期積分の計算の後に漸化計算を行う処理を、外側の４重ループで繰り返すことで二電子積分の値を求めるものである。ここで、４重ループ構造の初期積分の計算には、文献Ａや非特許文献１に記載されているように、指数関数や誤差関数の演算処理が行われる。従って、誤差関数の演算は８重ループで繰り返されるため、誤差関数の演算を高速化することで、二電子積分計算の高速化を実現しやすい。
【００４４】
２．  比較例
まず本実施形態の誤差関数演算装置により行われる誤差関数の求値法を説明する前に、本実施形態の比較例としての誤差関数の求値法について説明する。
【００４５】
誤差関数ＦＭ（Ｔ）の求値法として、（１５）式に示すようなテイラー展開を用いる手法が考えられる。
【００４６】
【数１５】
2005157876.tif 000007
【００４７】
ここでは、Ｃを定数とし、誤差関数ＦＭ（Ｔ）を３次のテイラー近似で近似した例を示している。そして、（１５）式の係数ＦＭ（Ｔ０）、ＦＭ＋１（Ｔ０）、ＦＭ＋２（Ｔ０）、ＦＭ＋３（Ｔ０）の値を係数テーブルに記憶させておく。Ｍの値は、どの程度まで細かく近似するか、即ち、近似の次数で決まり、例えばＭが０〜１４の求値を実現しようとすると、係数Ｆ０（Ｔ０）〜Ｆ１７（Ｔ０）の値が係数テーブルに記憶される。
【００４８】
図１に、比較例における係数テーブルを模式的に示した図を示す。係数テーブルには、入力変数Ｔの範囲に応じて予め決められたＴ０、Ｔ１、Ｔ２、・・・、ごとに、係数Ｆ０（Ｔ１）〜Ｆ１７（Ｔ１）、Ｆ０（Ｔ２）〜Ｆ１７（Ｔ２）、・・・、の値が記憶される。
【００４９】
（１５）式を用いた誤差関数の計算では、入力変数Ｔが与えられると入力変数ＴはＴ＝ＴＸ+εとなるＴＸと変位εに分けられ、ＴＸ（Ｘは０、１、２、・・）が与えられると、図１に示す係数テーブルから該入力変数ＴＸに対応した係数Ｆ０（ＴＸ）〜Ｆ１７（ＴＸ）が読み出され、変位εを用いて、（１５）式に従って誤差関数Ｆ０（Ｔ）〜Ｆ１４（Ｔ）の値を求める。
【００５０】
ところが、誤差関数ＦＭ（Ｔ）の値を高精度に求めるために、係数Ｆ０（Ｔ１）〜Ｆ１７（Ｔ１）、Ｆ０（Ｔ２）〜Ｆ１７（Ｔ２）、・・・、の値は、倍精度浮動小数点演算の精度で求められた値でなければならない。そのため、図１に示す係数テーブルに記憶される係数Ｆ０（Ｔ１）〜Ｆ１７（Ｔ１）、Ｆ０（Ｔ２）〜Ｆ１７（Ｔ２）、・・・、の値は、それぞれ倍精度浮動小数点データであり、変位εもまた倍精度浮動小数点データである。そして、これらの倍精度浮動小数点データを用いて、倍精度浮動小数点演算が行われる。
【００５１】
従って、比較例の求値法により実現される誤差関数演算装置は、例えばＩＥＥＥ（Institute of Electrical and Electronics Engineers）７５４に準拠する６４ビットの倍精度浮動小数点データで演算する積和演算器等が必要となり、集積化してもコスト高を招いてしまう。また演算スピードも整数演算器と比べて遅くなる。
【００５２】
図２に、比較例の求値法により実現される係数テーブルの容量の計算例の説明図を示す。入力変数Ｔの範囲は、図２に示すような範囲で刻み幅を変えることで、求める値の精度を維持しつつ、係数テーブルの容量を減らすことができる。入力変数Ｔの値が小さいほど、高精度である必要があり、入力変数Ｔの値が小さいほど刻み幅が小さいことが望ましい。
【００５３】
例えば入力変数Ｔの値が０〜２２の値までは、入力変数Ｔが０〜１、１〜２、・・・、２１〜２２のそれぞれに１／１０２４刻みのＴＸに対応した係数群を１エントリとしてテーブル化される。各エントリには、それぞれ倍精度浮動小数点データである係数Ｆ０（ＴＸ）〜Ｆ１７（ＴＸ）の計１８個が必要となる。従って、入力変数Ｔの値が０以上で２２以下までの範囲において、22,528（＝２２×１０２４）エントリが必要で、入力変数Ｔの値が０以上で２２以下の範囲で必要とされる係数テーブルの容量が3,244,032バイト（＝２２５２８×１８×８）となることを示している。
【００５４】
同様に入力変数Ｔの値が４５より大きく９０以下の値までは、11,520（＝４５×２５６）エントリが必要で、入力変数Ｔの値が４５より大きく９０以下の範囲で必要とされる係数テーブルの容量が1,658,880バイト（＝１１５２０×１８×８）となることを示している。
【００５５】
なおＴが９０より大きい範囲では、（１６）式で近似できることが知られている。
【００５６】
【数１６】
2005157876.tif 000008
【００５７】
以上のように比較例の求値法により実現される係数テーブルの容量は、45,824エントリで、合計6,598,656バイトになってしまう。従って、比較例の求値法により実現される誤差関数演算装置では、係数テーブルの大容量化を避けることができない。
【００５８】
図３に、比較例の求値法による演算処理のレイテンシの説明図を示す。
【００５９】
図３は、（１５）式における演算処理の順序を示す。即ち、（１５）式は、積（FMUL1）→積（FMUL2）→和（FSUM3）→積（FMUL4）→積（FMUL5）→和（FSUM6）→積（FMUL7）→和（FSUM8）→積（FMUL9）の順序で演算処理が行われる。ここで、例えば積（FMUL1）は、図３において係数ＦＭ＋３（Ｔ０）と（１／３）との積を倍精度浮動小数点演算により求めることを示し、例えば和（FSUM3）は、図３において積（FMUL2）の結果と、係数ＦＭ＋２（Ｔ０）との和を倍精度浮動小数点演算により求めることを示している。
【００６０】
図３において明らかなように、各積を求める倍精度浮動小数点乗算処理と、各和を求める倍精度浮動小数点加算処理とは、すべて前の演算結果を使用するため、前の演算結果を待ってから当該処理が開始されることになる。
【００６１】
ここで、倍精度浮動小数点乗算器と倍精度浮動小数点加算器とにより（１５）式の演算処理を行う場合のレイテンシ（latency）を考える。倍精度浮動小数点乗算処理のレイテンシを４サイクル、倍精度浮動小数点加算処理のレイテンシを４サイクルとし、係数テーブルからの読み出しデータの転送サイクルを無視すると、３６（＝４×９）サイクルになる。実際には、係数テーブルからの読み出しデータの転送サイクルを無視できず、しかも図２に示したような大容量の係数テーブルの参照時間が支配的になるものと考えられ、３６サイクル以上のレイテンシになってしまう。
【００６２】
これに対して、以下に述べる本実施形態では、（１５）式を更に変形し、かつ係数テーブルに記憶する係数テーブルを工夫することで、係数テーブルの小容量化と、演算処理回路の小型化を実現する。
【００６３】
３．  本実施形態の手法
本実施形態における誤差関数演算装置は、変数をＴ（正の実数）、次数をＭ（Ｍは０以上の整数）とする誤差関数ＦＭ（Ｔ）を求める。この誤差関数演算装置は、係数テーブルと、演算部（カリキュレータ、プロセッサ）とを含む。係数テーブルは、例えばＲＯＭ（Read Only Memory：読み出し専用メモリ）、ＲＡＭ（Random Access Memory：ランダムアクセスメモリ）、フリップフロップ等のハードウェアにより実現される。演算部は、ＡＳＩＣや専用回路等のハードウェアにより実現される。またこの演算部を、ＣＰＵ（Central Processing Unit：中央処理装置）及び該ＣＰＵを動作させるためのプログラム（ファームウェア）により実現してもよい。
【００６４】
係数テーブルは、誤差関数ＦＭ（Ｔ）のｎ（ｎは自然数）次の多項式近似により得られる、予め決められたＴ０について求められたＦＭ＋ｉ（Ｔ０）／ＦＭ（Ｔ０）（ｉは１〜ｎのうち少なくとも１つの整数）の値又はその定数倍の値を記憶する。演算部は、この係数テーブルからＦＭ＋ｉ（Ｔ０）／ＦＭ（Ｔ０）の値又はその定数倍の値を読み出し、誤差関数ＦＭ（Ｔ）の値を求める処理の少なくとも一部を、該ＦＭ＋ｉ（Ｔ０）／ＦＭ（Ｔ０）の値又はその定数倍の値を用いた固定小数点演算により行う。
【００６５】
このような誤差関数演算装置を実現するため、誤差関数ＦＭ（Ｔ）を（１７）式のように変形することで得られる係数を、固定小数点データとして係数テーブルに記憶させる。
【００６６】
【数１７】
2005157876.tif 000009
【００６７】
以下では、誤差関数ＦＭ（Ｔ）を３次のテイラー近似で近似した例を説明するが、２又は４次以上のテイラー近似で近似してもよい。ここで、Ｃは定数とする。
【００６８】
（１７）式は、次のように導出できる。まず誤差関数ＦＭ（Ｔ）は、（１８）式のようにテイラー展開できる。
【００６９】
【数１８】
2005157876.tif 000010
【００７０】
ここで、誤差関数ＦＭ（Ｔ）の性質から、ＦＭ（Ｔ）の微分結果は、（１９）式に示すように−ＦＭ＋１（Ｔ）となる。
【００７１】
【数１９】
2005157876.tif 000011
【００７２】
即ち、微分計算を繰り返すと、（２０）式のように一般化される（ｋは自然数）。
【００７３】
【数２０】
2005157876.tif 000012
【００７４】
（２０）式を（１８）式に代入すると、（１７）式と等価な（２１）式を導出できる。
【００７５】
【数２１】
2005157876.tif 000013
【００７６】
ところで、（１３）式に示す誤差関数ＦＭ（Ｔ）の被積分関数は、積分範囲０〜１の間で（２２）式が成立するため、被積分関数を積分範囲０〜１の間で積分した結果でも、ＦＭ＋ｋ＜ＦＭという関係が成立する。
【００７７】
【数２２】
2005157876.tif 000014
【００７８】
ここで、（１７）式においてＦＭ（Ｔ）＝Ｃ・ＦＭ（Ｔ０）・ｇ（ε）とおくと、ｇ（ε）は、（２３）式で表せる。
【００７９】
【数２３】
2005157876.tif 000015
【００８０】
ここで上述のようにＦＭ＋ｋ＜ＦＭであるため、（２３）式では、（ＦＭ＋１／ＦＭ）＜１、（ＦＭ＋２／ＦＭ）＜１、（ＦＭ＋３／ＦＭ）＜１が成立する。従って、（２３）式に示すｇ（ε）の範囲は、（２４）式、（２５）式のように表せる。
【００８１】
【数２４】
2005157876.tif 000016
【００８２】
【数２５】
2005157876.tif 000017
【００８３】
εが１に比べて十分に小さいことから、ｇ（ε）は０．５〜２の範囲にあることになる。即ち、ｇ（ε）は、固定小数点演算により求めることができる。これは、固定小数点の積和演算を４回繰り返してｇ（ε）を求め、その結果と浮動小数点データのＣＦＭ（Ｔ０）との積を求めればよいことを意味する。
【００８４】
従って、本実施形態における係数テーブルは、少なくとも次の係数の値（広義にはＦＭ＋ｉ（Ｔ０）／ＦＭ（Ｔ０）（ｉは１〜ｎのうち少なくとも１つの整数）の値又はその定数倍の値）を固定小数点データとして記憶しておけばよい。また、この係数テーブルに係数ＣＦＭ（Ｔ０）（倍精度浮動小数点データ）の値を記憶しておくことが望ましい。
【００８５】
【数２６】
2005157876.tif 000018
【００８６】
図４に、本実施形態における係数テーブルを模式的に示した図を示す。本実施形態における係数テーブルには、入力変数Ｔの範囲によって予め決められたＴ０、Ｔ１、Ｔ２、・・・、ごとに、係数が記憶される。Ｔ０については、Ｃ００Ｆ０（Ｔ０）、Ｆ１（Ｔ０）／Ｆ０（Ｔ０）、Ｆ２（Ｔ０）／（２Ｆ０（Ｔ０））、Ｆ３（Ｔ０）／（６Ｆ０（Ｔ０））、Ｃ０１Ｆ１（Ｔ０）、Ｆ２（Ｔ０）／Ｆ１（Ｔ０）、Ｆ３（Ｔ０）／（２Ｆ１（Ｔ０））、Ｆ４（Ｔ０）／（６Ｆ１（Ｔ０））、・・・・・が記憶される。ここで、Ｃ００、Ｃ０１、・・・は定数とする。
【００８７】
図４では、係数Ｃ００Ｆ０（Ｔ０）のように一部が倍精度浮動小数点データとして記憶され、１エントリ当たりに記憶すべき係数の数が増えるが、そのほとんどが固定小数点データとして記憶しておけばよく、係数テーブルの小容量化を図ることができる場合がある。また、後述するように係数テーブルを工夫することで、該係数テーブルの容量を著しく削減できるようになる。
【００８８】
また係数ＣＦＭ（Ｔ０）と、ｇ（ε）との積を後述のように工夫することで、本実施形態における誤差関数演算装置は、比較例のように倍精度浮動小数点乗算器や倍精度浮動小数点加算器で誤差関数ＦＭ（Ｔ）を求める必要がなくなり、集積化に適した構成で、低コストで誤差関数の演算の高速化を図ることができる誤差関数演算装置を提供できるようになる。
【００８９】
更に本実施形態における求値法では、その演算処理のレイテンシが、次のように短くなる。
【００９０】
図５に、本実施形態における誤差関数の求値法による演算処理のレイテンシの説明図を示す。
【００９１】
図５は、（１７）式における演算処理の順序を示す。即ち、（１７）式は、積（MUL 1）→和（SUM2）→積（MUL3）→和（SUM4）→積（MUL5）→和（SUM6）→積（FMUL7）の順序で演算処理が行われる。ここで、積（MUL1）→和（SUM2）は、積和（MAC1）で演算できる。積（MUL3）→和（SUM4）は、積和（MAC2）で演算できる。積（MUL5）→和（SUM6）は、積和（MAC3）で演算できる。従って、（１７）式は、積和（MAC1）→積和（MAC2）→積和（MAC3）→積（FMUL7）の順序で演算処理が行われる。
【００９２】
ここで、積和のレイテンシを３サイクル（積を２サイクル、和を１サイクル）とすると、積和演算部分は９（＝３×３）サイクルで結果が得られ、最後の積（FMUL7）を倍精度浮動小数点乗算処理で実現したとしても、１３サイクルとなる。従って、比較例との対比において、誤差関数の計算速度を約３分の１に短縮できるようになる。このように、（１７）式の一部を、固定小数点演算の積和演算器で求めることの意味は大きい。
【００９３】
しかも、誤差関数の性質を利用して、積（FMUL7）の乗算処理を後述のように簡素化することで、結果的に固定小数点演算の積和演算器により、誤差関数を高精度で、かつ高速に求めることができるようになる。
【００９４】
３．１  漸化式
図４に示した本実施形態における係数テーブルは、（２７）式で表される漸化式を用いることで、その容量を大幅に削減できる。
【００９５】
【数２７】
2005157876.tif 000019
【００９６】
（２７）式は、次のようにして導出できる。
【００９７】
【数２８】
2005157876.tif 000020
【００９８】
従って、Ｍが１７のときの係数のみを係数テーブルに記憶させておき、残りの係数を（２７）式に従って、変数Ｔ０について順次Ｆ１６（Ｔ０）、Ｆ１５（Ｔ０）、・・・・、Ｆ０（Ｔ０）、変数Ｔ１について順次Ｆ１６（Ｔ１）、Ｆ１５（Ｔ１）、・・・・、Ｆ０（Ｔ１）、・・・を求める。これにより、係数テーブルの容量を顕著に削減できるようになる。
【００９９】
３．２  多項式近似の次数
（２３）式に示すｇ（ε）は、３次のテイラー近似で近似された式であり、ｇ（ε）の誤差をδｇ（ε）とすると、１／１０２４刻みでは、−２−１１≦ε＜２−１１であるため、δｇ（ε）は（２９）式で示すテイラー近似の４次の項で表せる。
【０１００】
【数２９】
2005157876.tif 000021
【０１０１】
多項式近似の次数を大きくすれば、刻み幅を大きくしても同程度の誤差を維持できることが予想される。刻み幅を２倍にすれば係数テーブルのエントリ数を半分にできる。その一方で、次数を１増加させても、記憶すべき係数が１つ増えるだけであり、係数テーブルの１エントリ当たりのデータが２倍になることはない。
【０１０２】
ここで、例えば多項式近似を４次とし、入力変数Ｔの刻み幅を１／２５６にした場合を考える。ｇ（ε）の誤差δｇ（ε）は、１／２５６刻みでは、−２−９≦ε＜２−９であるため、δｇ（ε）は（３０）式で示すテイラー近似の５次の項で表せる。
【０１０３】
【数３０】
2005157876.tif 000022
【０１０４】
（２９）式と（３０）式とを比較すると、３次の多項式近似より、４次の多項式近似の方が、ｇ（ε）の精度が高い。
【０１０５】
同様に、例えば多項式近似を５次とし、入力変数Ｔの刻み幅を１／１２８にした場合を考える。ｇ（ε）の誤差δｇ（ε）は、１／１２８刻みでは、−２−８≦ε＜２−８であるため、δｇ（ε）は（３１）式で示すテイラー近似の６次の項で表せる。
【０１０６】
【数３１】
2005157876.tif 000023
【０１０７】
（３０）式と（３１）式とを比較すると、４次の多項式近似より、５次の多項式近似の方が、ｇ（ε）の精度が高い。このように多項式近似の次数ｎを大きくすることで、入力変数Ｔの刻み幅を粗くできる。その結果、係数テーブルのエントリ数を大幅に減らすことができ、係数テーブルの容量を大幅に削減できる。
【０１０８】
３．３  係数テーブルのアクセス
上述した係数テーブルをアクセスする場合、入力変数Ｔに対応して、係数テーブルをアクセスするためのインデックスを作成する必要がある。ところが、小原のアルゴリズムでは、図２に示すようにＴの値によって刻み幅を変えているため、入力変数Ｔがどの範囲を判断した上で、インデックスを作成する必要がある。このような処理は、変数Ｔの大小比較（例えば２２以上であるか否かの大小比較）及びインデックスの計算を、それぞれ倍精度浮動小数点演算で行う必要が生じてしまう。
【０１０９】
そこで本実施形態では、例えばＩＥＥＥ７５４に準拠するフォーマットの入力変数Ｔに対して、以下のようなデコーダのデコード結果に基づいて係数テーブルをアクセスすることで、倍精度浮動小数点演算によるＴの大小比較及びインデックス作成処理を不要としている。
【０１１０】
図６（Ａ）、（Ｂ）に、ＩＥＥＥ７５４に準拠するフォーマットの説明図を示す。ＩＥＥＥ７５４に準拠する倍精度浮動小数点は、図６（Ａ）に示すように表わされる。
【０１１１】
図６（Ａ）のように表わされる倍精度浮動小数点は、図６（Ｂ）に示すように１ビットの符号部Ｓ、１１ビットの指数部Ｅ、５２ビットの仮数部Ｍを有する。指数部Ｅには、図６（Ａ）の指数にバイアス値（倍精度浮動小数点の場合は１０２３）を加算した値が２進数で表わされる。ＩＥＥＥ７５４では、正規化された２進数の先頭の１を仮数部Ｍに持たないようにしており、いわゆる正規化によって仮数の実際の長さは５３ビットとなる。
【０１１２】
図７に、図６（Ｂ）に示すフォーマットの変数Ｔをデコードするデコーダの動作の説明図を示す。デコーダは、倍精度浮動小数点（広義には浮動小数点）表示された変数Ｔの指数部と該変数Ｔの仮数部の上位ビットとに基づいてインデックスを生成する。
【０１１３】
例えば入力変数Ｔの値が１６．０以上で９０より小さい範囲では、該変数Ｔの指数部Ｅと仮数部Ｍの上位１４ビットとに基づいて、インデックスを作成する。また変数Ｔの値が４．０以上で８．０より小さい範囲では、該変数Ｔの指数部Ｅと仮数部Ｍの上位１３ビットとに基づいて、インデックスを作成する。このように、入力変数Ｔの値が１６より小さい範囲では、指数部Ｅの値が１小さくなるごとに、インデックスを作成するための仮数部Ｍの上位ビット数を１つずつ小さくしていく。
【０１１４】
このようなデコーダのデコード結果に基づいてインデックスを生成することで、倍精度浮動小数点演算により大小比較を行うことなく、係数テーブルにアクセスできるようになる。しかも、指数部Ｅの値により、仮数部Ｍの上位ビット数を変化させるようにしたので、入力が１６以上では入力変数Ｔの値が小さいほど刻み幅を小さくし、１６より小さいときには刻み幅を一定にするように容易に構成できる。そのため、図２に示すように、変数Ｔと、２２や４５といったＴの範囲の境界値とを浮動小数点演算による大小比較を行うことなく、誤差関数の値を高精度に求めることができる。
【０１１５】
４．  誤差関数演算装置
図８に、本実施形態における誤差関数演算装置の詳細な構成例のブロック図を示す。
【０１１６】
本実施形態における誤差関数演算装置５は、係数テーブル１０を含む。係数テーブル１０は、図４に示す係数の値を記憶する。係数テーブル１０は、デコーダ２０によって生成されたインデックスに対応した記憶領域に記憶された係数の値を出力する。
【０１１７】
誤差関数演算装置５は、デコーダ２０を含む。デコーダ２０は、図７に示したように、倍精度浮動小数点表示された入力変数Ｔの指数部と該入力変数Ｔの仮数部の上位ビットとに基づいてインデックスを作成する。
【０１１８】
誤差関数演算装置５は、Ｔ０抽出部３０と、ε抽出部４０とを含む。誤差関数演算装置５には、倍精度浮動小数点表示された入力変数Ｔが入力される。
【０１１９】
図９に、Ｔ０抽出部３０と、ε抽出部４０との動作説明図を示す。
【０１２０】
Ｔ０抽出部３０は、倍精度浮動小数点表示された入力変数Ｔの指数部と、該入力変数Ｔの仮数部の上位Ｐ（Ｐは正の整数）ビットとを抽出する。Ｐの値は、予め決められており、図７に示したデコーダ２０において参照される入力変数Ｔの仮数部の上位ビット数より多い値である。
【０１２１】
図８において、ε抽出部４０は、倍精度浮動小数点表示された入力変数Ｔの仮数部の残りの下位ビットを抽出する。即ち、入力変数Ｔと、Ｔ０抽出部３０により抽出された値との差が、ε抽出部４０により抽出された値となる。
【０１２２】
Ｔ０抽出部３０の出力は、デコーダ２０と、指数部テーブル５０とに供給される。ε抽出部４０の出力は、レジスタＢに供給される。
【０１２３】
誤差関数演算装置５は、固定小数点で積和演算を行う整数積和演算器６０を含む。整数積和演算器６０には、レジスタＡ、レジスタＢ及びレジスタＣの各値が入力される。レジスタＡの値をＡ、レジスタＢの値をＢ、レジスタＣの値をＣとすると、整数積和演算器６０は、固定小数点演算により（Ａ＋Ｂ×Ｃ）の値を求めて出力する。誤差関数演算装置５は、セレクタ（ＭＵＸ）７０、８０、９０を含む。セレクタ７０、８０、９０は、シーケンス制御部１００によって切り替え制御される。
【０１２４】
誤差関数演算装置５は、シーケンス制御部１００を含む。シーケンス制御部１００は、上述のセレクタ７０、８０、９０の他にデコーダ２０を制御し、整数積和演算器６０の演算処理を制御できる。
【０１２５】
図１０（Ａ）、（Ｂ）に、整数積和演算器６０の動作説明図を示す。ここでは、（１７）式に相当する図１０（Ａ）に示す式を計算する場合について説明する。係数Ａ０、Ａ１、Ａ２、Ａ３は、係数テーブル１０に記憶されている。図１０（Ａ）において、εは、ε抽出部４０によって抽出される。
【０１２６】
まず入力変数Ｔが入力されると、準備サイクルにおいてＴ０抽出部３０及びε抽出部４０は、それぞれＴ０、εを抽出する。シーケンス制御部１００は、デコーダ２０によりＴ０の値に対応した係数Ａ２、Ａ３を読み出すためのインデックスを作成させる。その結果、係数テーブル１０が該インデックスに対応して記憶された係数Ａ３（＝ｇ３）、Ａ２を出力する。そして、セレクタ７０が係数テーブル１０からの係数Ａ２を出力しレジスタＡにセットし、セレクタ８０が係数テーブル１０からの係数Ａ３を出力してレジスタＣにセットし、セレクタ９０がε抽出部４０によって抽出されたεを出力してレジスタＢにセットする。従って、整数積和演算器６０は、第１のサイクルにおいて、（Ａ２＋（−ε）×Ａ３）（＝ｇ２）を出力し、次の第２のサイクルにおいて、レジスタＣに格納する。
【０１２７】
シーケンス制御部１００は、第１のサイクルにおいて、デコーダ２０によりＴ０の値に対応した係数Ａ１を読み出すためのインデックスを作成させる。その結果、係数テーブル１０が該インデックスに対応した記憶された係数Ａ１を出力し、セレクタ７０が係数テーブル１０からの係数Ａ１を出力してレジスタＡにセットし、セレクタ８０が第１のサイクルで求められた整数積和演算結果ｇ２を出力してレジスタＣにセットする。従って、整数積和演算器６０は、第２のサイクルにおいて、（Ａ１＋（−ε）×（Ａ２＋（−ε）×Ａ３））（＝ｇ１）を出力し、次の第３のサイクルにおいて、レジスタＣに格納する。
【０１２８】
シーケンス制御部１００は、第２のサイクルにおいて、セレクタ７０により１を出力させ、セレクタ８０により第２のサイクルで求められた整数積和演算結果ｇ１を出力させレジスタＣにセットする。従って、整数積和演算器６０は、第３のサイクルにおいて、（１＋（−ε）×（Ａ１＋（−ε）×（Ａ２＋（−ε）×Ａ３）））（＝ｇ０）を出力し、次の第４のサイクルにおいて、レジスタＣに格納する。
【０１２９】
シーケンス制御部１００は、第３のサイクルにおいて、セレクタ７０により０を出力させレジスタＡにセットし、セレクタ８０により第３のサイクルで求められた整数積和演算結果ｇ０を出力させレジスタＣにセットし、セレクタ９０により係数テーブル１０から出力されるＡ０の仮数部（＝−Ａ０ｍ）を出力し、レジスタＢにセットさせる。従って、整数積和演算器６０は、第４のサイクルにおいて、Ａ０ｍ×ｇ０を出力する。即ち、整数積和演算器６０は、図１０（Ａ）のＡ０の仮数部と、ｇ（ε）との固定小数点演算による乗算とを実現する。
【０１３０】
ところで図８において、指数部テーブル５０は、Ｔ０抽出部３０によって抽出された入力変数Ｔ０に対応するＡ０の指数部を出力する。ここで、（１７）式において、ＦＭ（Ｔ）＝Ａ０・ｇ（ε）とする。即ち（１７）式において、Ａ０＝ＣＦＭ（Ｔ０）である。Ａ０はｍ×２Ｅ（１≦ｍ＜２）と倍精度浮動小数点表示でき、（２４）式、（２５）式より０．５＜ｇ（ε）＜２であるため、０．５＜ｍ・ｇ（ε）＜４となる。従って、Ａ０・ｇ（ε）の計算は、Ａ０の仮数部とｇ（ε）とを固定小数点の積和演算により求められることを意味する。そして、その結果を正規化したとき、求められる値の指数部の値は、Ｅ又はＥ＋１になる。
【０１３１】
そのため指数部テーブル５０が、Ｔ０抽出部３０によって抽出された入力変数Ｔ０に対応するＡ０の指数部を出力するようになっている。
【０１３２】
また誤差関数演算装置５は、桁上げ補正部１１０と、指数補正部１２０とを含む。桁上げ補正部１１０には、整数積和演算器６０の出力が供給される。指数補正部１２０には、指数部テーブル５０の出力が供給される。
【０１３３】
桁上げ補正部１１０は、整数積和演算器６０の出力結果である仮数部の桁上げの有無を検出する。そして、桁上げ補正部１１０が仮数部の桁上げを検出したとき、該仮数部を右に１ビットだけシフトして仮数部出力として出力すると共に、指数補正部１２０にその旨を通知する。このとき指数補正部１２０は、指数部テーブル５０からの指数の値を１だけ加算して、指数部出力として出力する。
【０１３４】
一方、桁上げ補正部１１０が仮数部の桁上げを検出しなかったとき、桁上げ補正部１１０は、整数積和演算器６０の出力をそのまま仮数部出力として出力する。また指数補正部１２０は、指数部テーブル５０からの指数の値をそのまま指数部出力として出力する。
【０１３５】
このように桁上げ補正部１１０と指数補正部１２０とにより正規化のための補正を行うことで、倍精度浮動小数点の乗算処理を行うことなく、図１０（Ａ）に示すＡ０とｇ０との積を誤差関数の値として高精度に求めることができる。即ち、係数テーブル１０がＦＭ（Ｔ０）の定数倍の値を記憶する。そして、係数テーブル１０から読み出されたＦＭ＋ｉ（Ｔ０）／ＦＭ（Ｔ０）の定数倍の値を用いた固定小数点演算の演算結果と、ＦＭ（Ｔ０）の定数倍の値とに基づいて、誤差関数ＦＭ（Ｔ）の値を求める処理を行うということができる。なお係数テーブル１０がＦＭ（Ｔ０）の値を記憶しておき、このＦＭ（Ｔ０）の値の定数倍の値を用いて誤差関数ＦＭ（Ｔ）の値を求めるようにすることも可能である。
【０１３６】
このような誤差関数演算装置５では、係数テーブル１０、指数部テーブル５０は、ＲＯＭやＲＡＭ等のハードウェア回路により実現できる。また整数積和演算器６０は、専用のハードウェア回路、或いはＣＰＵ及びファームウェア（ソフトウェア）により実現できる。デコーダ２０、Ｔ０抽出部３０、ε抽出部４０、桁上げ補正部１１０、指数補正部１２０は、専用のハードウェア回路、或いはＣＰＵ及びファームウェア（ソフトウェア）により実現できる。
【０１３７】
また誤差関数演算装置５において、演算部１５０は、指数部テーブル５０、レジスタＡ、レジスタＢ、レジスタＣ、整数積和演算器６０、セレクタ７０、セレクタ８０、セレクタ９０、桁上げ補正部１１０、指数補正部１２０を含むことができる。なお演算部１５０は、上記の少なくとも一部を省略する構成としてもよい。
【０１３８】
本実施形態では、予め係数テーブル１０にすべての係数の値が記憶されているものとして説明したが、これに限定されるものではない。例えば係数テーブル１０をＲＡＭ（その記憶内容が書き換え可能なメモリ）で構成し、Ｍが例えば１７のときの係数の値を記憶しておき、（２７）式に示す漸化式に従ってＭが０〜１６のときの係数の値を求めた後、図４に示す係数の値を求めるようにしても良い。即ち、係数テーブル１０が、予め決められたＴ０について求められたＦＭ＋ｎ（Ｔ０）（ｎは自然数）の値を記憶する。そして、係数テーブル１０からＦＭ＋ｎ（Ｔ０）の値を読み出し、誤差関数ＦＭ（Ｔ）の値を求める処理の少なくとも一部を、（２７）式により求められたＦＭ＋ｎ−１（Ｔ０）、・・・、ＦＭ（Ｔ０）の値と係数テーブル１０からのＦＭ＋ｎ（Ｔ０）の値とを用いた固定小数点演算により行うようにしても良い。
【０１３９】
ところで、図８に示す係数テーブル１０は、Ｍが例えば０〜１４までの範囲についてのすべての係数の値を記憶すると、大容量になってしまう。誤差関数を求める際には、１つのＭについての係数の値が高速にアクセスできれば良い。そこで、本実施形態の変形例では、外部メモリに、ＦＬ（Ｔ０）（Ｌは０〜Ｍの整数）の値又はその定数倍、ＦＬ＋ｉ（Ｔ０）／ＦＬ（Ｔ０）（ｉは１〜ｎの整数）の値又はその定数倍の値を記憶させておき、該外部メモリに記憶されたＦＮ（Ｔ０）の値又はその定数倍、ＦＮ＋ｉ（Ｔ０）／ＦＮ（Ｔ０）（Ｎは０〜Ｍのいずれか１つの整数）の値又はその定数倍の値を読み出して、該ＦＮ＋ｉ（Ｔ０）／ＦＮ（Ｔ０）の値又はその定数倍の値を係数テーブルに書き込むようにする。
【０１４０】
即ち、誤差関数演算装置の外部に、Ｍが例えば０〜１４までの範囲についてのすべての係数の値を記憶する外部メモリを設ける。そして、係数テーブルをＲＡＭで構成し、外部メモリから１つのＭについての係数の値のみを順次転送できるようにする。こうすることで、誤差関数演算装置において、係数テーブルを記憶する内蔵ＲＡＭの容量を最低限にでき、より集積化に適した構成にすることができる。
【０１４１】
図１１に、本変形例における誤差関数演算装置の構成例のブロック図を示す。但し、図８に示す誤差関数演算装置５と同一部分には同一符号を付し、適宜説明を省略する。
【０１４２】
本変形例における誤差関数演算装置２００には、外部メモリ３００が接続される。外部メモリ３００には、図４に示すように、Ｍが例えば０〜１４までの範囲についてのすべての係数の値を記憶する。
【０１４３】
誤差関数演算装置２００は、係数テーブル２１０を含む。係数テーブル２１０には、外部メモリ３００に記憶されたＭが０〜１４までの係数の値の一部（例えば１つのＭについての係数の値（Ｃ００Ｆ０（Ｔ０）、Ｆ１（Ｔ０）／Ｆ０（Ｔ０）、Ｆ２（Ｔ０）／（２Ｆ０（Ｔ０））、Ｆ３（Ｔ０）／（６Ｆ０（Ｔ０）））が転送されて書き込まれるようになっている。そのため誤差関数演算装置２００は、メモリインターフェース２２０、セレクタ２３０、転送制御部（転送コントローラ）２４０を含む。
【０１４４】
メモリインターフェース２２０は、外部メモリ３００との間のデータ転送のインタフェース処理を行う。メモリインターフェース２２０は、転送制御部２４０によって制御される。より具体的には、メモリインターフェース２２０は、転送制御部２４０からの指示された１つのＭについてのデータを外部メモリ３００から読み出す処理を行う。メモリインターフェース２２０を介して外部メモリ３００から出力されたデータは、係数テーブル２１０に書き込まれる。より具体的には、転送制御部２４０によって指定されたインデックスに対応した係数テーブル２１０の記憶領域に、メモリインターフェース２２０を介して外部メモリ３００から出力されたデータが書き込まれる。
【０１４５】
そのためセレクタ２３０は、シーケンス制御部２５０の切り替え制御により、デコーダ２０からのインデックス、又は転送制御部２４０からのインデックスのいずれかを係数テーブル２１０に対して出力できるようになっている。
【０１４６】
シーケンス制御部２５０は、図８に示すシーケンス制御部１００に対して、更に転送制御部２４０、セレクタ２３０の制御を行うことができるようになっている。
【０１４７】
なお図１１では、外部メモリ３００には、図４に示すように、Ｍが例えば０〜１４までの範囲についてのすべての係数の値を記憶するものとして説明したが、これに限定されるものではない。例えば外部メモリ３００には、予めＭが例えば１７のときの係数値を記憶しておき、（２７）式に示す漸化式に従ってＭが０〜１６のときの係数の値を求めた後、図４に示す係数の値を外部メモリ３００に書き込むようにしても良い。或いは、外部メモリ３００には、予めＭが例えば１７のときの係数値を記憶しておき、（２７）式に示す漸化式に従ってＭが０のときの係数の値、Ｍが１のときの係数の値、・・・というように順次、内部の係数テーブル２１０に直接書き込むようにしても良い。
【０１４８】
５．  コプロセッサへの適用例
本実施形態、又は本実施形態の変形例における誤差関数演算装置は、コプロセッサ（coprocessor）に適用できる。
【０１４９】
図１２に、本実施形態又は本変形例における誤差関数演算装置が適用されたコプロセッサの構成例のブロック図を示す。
【０１５０】
コプロセッサ４００は、ＣＰＵ５００に接続される。コプロセッサ４００は、ＣＰＵ５００からのコマンドに従って処理を行い、その処理結果である数値演算結果をＣＰＵ５００に対して出力する。
【０１５１】
コプロセッサ４００及びＣＰＵ５００は、データバス５１０を介して接続される。データバス５１０には、ＲＡＭ５２０が接続される。ＲＡＭ５２０には、例えばＣＰＵ５００が実行するプログラムが記憶される。またＲＡＭ５２０は、ＣＰＵ５００やコプロセッサ４００の処理中に必要とされるワーク領域として用いられる。
【０１５２】
ＣＰＵ５００がＲＡＭ５２０に記憶されたプログラムを実行する場合、ＣＰＵ５００は、ＲＡＭ５２０からプログラムを逐次読み出し、読み出したプログラムをデコードし、そのデコード結果に対応した処理を行う。なおＣＰＵ５００は、ＣＰＵ５００が内蔵するＲＡＭ又はＲＯＭに、予めプログラムを格納しておいてもよい。
【０１５３】
コプロセッサ４００は、共通バス４１０を含む。共通バス４１０は、データバス５１０に接続される。共通バス４１０には、レジスタ部４２０、指数関数演算器４３０、誤差関数演算器４４０、乗算器４５０、加算器４６０が接続される。従って指数関数演算器４３０、誤差関数演算器４４０、乗算器４５０、加算器４６０は、レジスタ部４２０を共有できる。
【０１５４】
コプロセッサ４００は、制御部４７０を含む。制御部４７０は、レジスタ部４２０、指数関数演算器４３０、誤差関数演算器４４０、乗算器４５０、加算器４６０を制御する。より具体的には制御部４７０は、デコーダ４７２を含む。デコーダ４７２は、ＣＰＵ５００からのコマンドをデコードする。そして、制御部４７０は、デコーダ４７２のデコード結果に対応して、指数関数演算器４３０、誤差関数演算器４４０、乗算器４５０、加算器４６０の各部の演算処理の開始を指示する。そして指数関数演算器４３０、誤差関数演算器４４０、乗算器４５０、加算器４６０は、レジスタ部４２０に記憶された値を参照して処理を行う。
【０１５５】
ここで指数関数演算器４３０は、指数演算を行う。より具体的には指数関数演算器４３０は、（１６）式に示す処理を行い、二電子積分の計算において、入力変数Ｔが９０よりい大きいときの誤差関数ＦＭ（Ｔ）の値を求めることができる。
【０１５６】
また誤差関数演算器４４０として、本実施形態における誤差関数演算装置５又は本変形例における誤差関数演算装置２００を適用できる。なお誤差関数演算器４４０として本変形例における誤差関数演算装置２００を適用する場合、外部メモリ３００の機能をＲＡＭ５２０に持たせることができる。
【０１５７】
乗算器４５０は、倍精度浮動小数点乗算処理を行う。加算器４６０は、倍精度浮動小数点加算処理を行う。
【０１５８】
ＣＰＵ５００がプログラム実行中において誤差関数ＦＭ（Ｔ）の演算処理を行う場合、コプロセッサ４００に対してコマンドを発行する。コプロセッサ４００は、このコマンドをデコードする。このコマンドは、入力変数Ｔ、次数Ｍの値を指定できるようにしてもよいが、ＣＰＵ５００からのコマンド発行に対応して、制御部４７０が予め決められた変数Ｔ、次数Ｍの値を順次、コプロセッサ４００の各部に供給するようにしても良い。
【０１５９】
そしてＴが９０より大きいとき、（１６）式に従って誤差関数ＦＭ（Ｔ）の計算結果が求められ、Ｔが９０以下のとき、上述したように誤差関数演算器４４０により（１７）式に従って誤差関数ＦＭ（Ｔ）の計算結果が求められる。
【０１６０】
なおコプロセッサ４００の構成は図１２に示したものに限定されるものではなく、図１２に示すコプロセッサ４００の一部を省略しても良い。
【０１６１】
なお、本発明は上述した実施の形態に限定されるものではなく、本発明の要旨の範囲内で種々の変形実施が可能である。
【０１６２】
本実施形態又は本変形例では、誤差関数をテイラー近似する場合について説明したが、これに限定されるものではなく、チェビシェフ近似等の他の多項式近似を用いてもよい。
【０１６３】
本実施形態又は本変形例では、誤差関数ＦＭ（Ｔ）のｎ（ｎは自然数）次の多項式近似により得られる、予め決められたＴ０について求められたＦＭ＋ｉ（Ｔ０）／ＦＭ（Ｔ０）（ｉは１〜ｎのうち少なくとも１つの整数）の定数倍の値を記憶させていたがこれに限定されるものではなく、ＦＭ＋ｉ（Ｔ０）／ＦＭ（Ｔ０）の値を記憶させておき、演算部でＦＭ＋ｉ（Ｔ０）／ＦＭ（Ｔ０）の値を定数倍させるようにしてもよい。
【０１６４】
例えば本実施形態又は本変形例では、非経験的分子軌道計算を用いる非経験的分子軌道法における誤差関数の計算結果を求める場合について説明したが、これに限定されるものではない。ガウス関数が適用される関数の計算には、誤差関数を求める必要があり、任意の関数はガウス関数の重ね合わせで表現できることから、分子軌道法の分野に限らず他の分野において誤差関数を計算する場合にも適用できる。
【０１６５】
また、本発明のうち従属請求項に係る発明においては、従属先の請求項の構成要件の一部を省略する構成とすることもできる。また、本発明の１の独立請求項に係る発明の要部を、他の独立請求項に従属させることもできる。
【図面の簡単な説明】
【０１６６】
【図１】比較例における係数テーブルの模式図。
【図２】比較例の求値法により実現される係数テーブルの容量の計算例の説明図。
【図３】比較例の求値法による演算処理のレイテンシの説明図。
【図４】本実施形態における係数テーブルの模式図。
【図５】本実施形態の誤差関数の求値法による演算処理のレイテンシの説明図。
【図６】図６（Ａ）、（Ｂ）はＩＥＥＥ７５４に準拠するフォーマットの説明図。
【図７】図６（Ｂ）のフォーマットの変数をデコードするデコーダの動作説明図。
【図８】本実施形態における誤差関数演算装置の詳細な構成例のブロック図。
【図９】Ｔ０抽出部とε抽出部の動作説明図。
【図１０】図１０（Ａ）、（Ｂ）は整数積和演算器の動作説明図。
【図１１】本変形例における誤差関数演算装置の構成例のブロック図。
【図１２】本実施形態又は本変形例における誤差関数演算装置が適用されたコプロセッサの構成例のブロック図。
【図１３】小原のアルゴリズムの説明図。
【符号の説明】
【０１６７】
５、２００  誤差関数演算装置、１０、２１０  係数テーブル、２０  デコーダ、
３０  Ｔ０抽出部、４０  ε抽出部、５０  指数部テーブル、６０  整数積和演算器、
７０、８０、９０、２３０  セレクタ（ＭＵＸ）、１００、２５０  シーケンス制御部、
１１０  桁上げ補正部、１２０  指数補正部、１５０  演算部、
２２０  メモリインターフェース、２４０  転送制御部、３００  外部メモリ
【図１】
2005157876.tif 000034
【図２】
2005157876.tif 000035
【図３】
2005157876.tif 000036
【図４】
2005157876.tif 000037
【図５】
2005157876.tif 000038
【図６】
2005157876.tif 000039
【図７】
2005157876.tif 000040
【図８】
2005157876.tif 000041
【図９】
2005157876.tif 000042
【図１０】
2005157876.tif 000043
【図１１】
2005157876.tif 000044
【図１２】
2005157876.tif 000045
【図１３】
2005157876.tif 000046