(57)【特許請求の範囲】
【請求項１】
入力データが前記入力データの区間の端部のデータであるか否かを検出する端部検出手段と、
所定の第１の関数に対する近似値を算出する第２の関数に前記入力データを適用した算出結果である加算結果が、前記入力データを前記第１の関数に適用した場合に発生しないアンダーフローである偽のアンダーフローを発生させるか否かを検知し、前記加算結果が偽のアンダーフローを発生させる場合に、前記加算結果を偽のアンダーフローを発生させない値に修正して出力値とし、前記加算結果が偽のアンダーフローを発生させない場合に、前記加算結果を前記出力値とするアンダーフロー検知手段と、
前記入力データが端部のデータの場合、前記端部に対応した所定のデータを選択し、前記入力データが端部のデータでない場合、前記出力値を選択する選択手段と
を含む情報処理装置。
【請求項２】
前記第２の関数が、一次関数であり、
前記入力データにおける最上位ビットから所定の範囲の上位ビットを基に前記一次関数の傾きを抽出する傾き抽出手段と、
前記傾きを基に前記一次関数の切片を抽出する切片抽出手段と、
前記傾きと、前記入力データにおける前記上位ビットを除いた下位ビットとを乗算する乗算手段と、
前記乗算の結果と前記切片とを加算して前記加算結果を算出する加算手段とを
さらに含む請求項１に記載の情報処理装置。
【請求項３】
前記傾き抽出手段が、
前記第１の関数と第２の関数との最大誤差を、前記区間の両端部における前記第１の関数の値を基に算出された一次関数と前記第１の関数との最大誤差の半分の値とする傾きを抽出する
請求項２に記載の情報処理装置。
【請求項４】
アンダーフロー検知手段が、
前記加算結果を浮動小数点表記としたときの仮数部の値が所定の値より小さいか否かを基に、前記加算結果が前記偽のアンダーフローを発生させるか否かを検知する
請求項１ないし３のいずれか１項に記載の情報処理装置。
【請求項５】
前記第１の関数が、
前記入力データに対する逆数関数、累乗根逆数関数、又は、累乗逆数関数である
請求項１ないし４のいずれか１項に記載の情報処理装置。
【請求項６】
入力データが前記入力データの区間の端部のデータであるか否かを検出し、
所定の第１の関数に対する近似値を算出する第２の関数に前記入力データを適用した算出結果である加算結果が、前記入力データを前記第１の関数に適用した場合に発生しないアンダーフローである偽のアンダーフローを発生させるか否かを検知し、
前記加算結果が偽のアンダーフローを発生させる場合に、前記加算結果を偽のアンダーフローを発生させない値に修正して出力値とし、
前記加算結果が偽のアンダーフローを発生させない場合に、前記加算結果を前記出力値とし、
前記入力データが端部のデータの場合、前記端部に対応した所定のデータを選択し、
前記入力データが端部のデータでない場合、前記出力値を選択する
情報処理方法。
【請求項７】
入力データが前記入力データの区間の端部のデータであるか否かを検出する処理と、
所定の第１の関数に対する近似値を算出する第２の関数に前記入力データを適用した算出結果である加算結果が、前記入力データを前記第１の関数に適用した場合に発生しないアンダーフローである偽のアンダーフローを発生させるか否かを検知する処理と、
前記加算結果が偽のアンダーフローを発生させる場合に、前記加算結果を偽のアンダーフローを発生させない値に修正して出力値とする処理と、
前記加算結果が偽のアンダーフローを発生させない場合に、前記加算結果を前記出力値とする処理と、
前記入力データが端部のデータの場合、前記端部に対応した所定のデータを選択する処理と、
前記入力データが端部のデータでない場合、前記出力値を選択する処理と
をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、数値の計算処理に関し、特に、近似計算を用いる情報処理装置、情報処理方法、及び、プログラムに関する。
【背景技術】
【０００２】
情報処理装置において、算術演算（例えば、加算、減算、乗算、及び、除算）は、いろいろな構成を用いて実行される。例えば、情報処理装置は、汎用的な加算器を用いたソフトウェア処理に基づいて、各種の算術演算を実行している。あるいは、情報処理装置は、各種の演算用の専用回路を用いて、算術演算を実行している。
【０００３】
ＣＰＵ（Central Processing Unit）などの集積回路に実装される除算回路に用いられる方法として、大きく分けて、二種類の方法が、用いられている。
【０００４】
第１の方法は、人が除算を計算する場合に用いる筆算と同等の処理を実施する方法である。つまり、第１の方法は、減算と、ビットのシフトとを用いた方法である。第１の方法は、「減算シフト型除算方式」と呼ばれている。
【０００５】
第２の方法は、除算を除数の逆数の乗算に変換して、除算の結果を算出する方法である。第２の方法は、除数に対する逆数を算出することが必要である。そこで、第２の方法は、除数の逆数を、逆数近似値の初期値（以下、「初期逆数近似値」と呼ぶ）から所定の方法（例えば、ニュートン法）を用いて算出する（例えば、特許文献１及び２を参照）。第２の方法は、「乗算型除算方式」と呼ばれている。なお、乗算型除算方法における乗算の処理は、一般的な乗算に用いられる乗算処理（例えば、乗算器を用いる処理）である。
【０００６】
各方法は、以下のような特徴がある。
【０００７】
減算シフト型除算方式は、逐次的に計算を実行する。そのため、減算シフト型除算方式は、計算処理におけるレイテンシ（遅延：latency）が大きくなる。また、減算シフト型除算方式は、除算として完結する専用のハードウェア（Hardware：ＨＷ）を必要とする。そのため、減算シフト型除算方式は、ＨＷの実装に必要となる面積が大きい。上記の点が、減算シフト型除算方式における欠点である。
【０００８】
しかし、減算シフト型除算方式は、演算処理が、上記の専用のＨＷの回路内で、完結する方式である。つまり、減算シフト型除算方法は、他の回路の処理などに影響を与えない。この点は、減算シフト型除算方法の利点である。
【０００９】
一方、乗算型除算方式が必要とするＨＷは、初期逆数近似値を求める回路となる。そのため、乗算型除算方式は、減算シフト型除算方式に比べ、回路（ハードウェア）量及び実装面積を削減できる。さらに、乗算型除算方式において、上記の初期逆数近似値を算出した後の処理は、乗算器を用いた数回の乗算処理となる。つまり、乗算型除算方式は、上記の初期逆数近似値の算出と数回の乗算とを基に、除算の結果を得ることができる。そのため、乗算型除算方式は、減算シフト型除算方式に比べ、高速に除算の結果を得ることができる。上記の点は、乗算型除算方式の利点である。
【００１０】
しかし、乗算型除算方式は、一定期間、上記の乗算のため、乗算の処理に伴うリソース、又は、乗算器を占有する。そのため、乗算型除算方式は、他の回路の処理又はシステムのパフォーマンスに、影響を与える。この点は、乗算型除算方法の欠点である。
【００１１】
上記のとおり、各方式は、それぞれ、利点及び欠点を備えている。そこで、一般的に、除算回路の方式は、除算回路が実装されるＨＷにおける面積、及び、所望の性能を勘案して選択される。
【００１２】
以下、本発明に関連する乗算型乗算方式について、さらに説明する。
【００１３】
上記の説明からも明らかなように、乗算型除算方式は、性能、すなわち、レイテンシの短縮が求められている場合に、選択されることが多い。乗算型除算方法において、初期逆数近似値から所定の方法を用いて逆数を算出する処理の回数は、初期逆数近似値の精度に概ね比例する。つまり、レイテンシを短縮するために、高い精度の初期逆数近似値の算出が、求められる。
【００１４】
乗算型除算方式において、精度の高い初期逆数近似値を求めるための方法の一つは、保持する初期逆数近似値の数を増やすことである。ただし、一般的に、初期逆数近似値は、メモリなどに、初期逆数近似値のデータのテーブル（以下、「初期値テーブル」を呼ぶ）として保持される。そのため、保持する初期逆数近似値の数の増大は、初期値テーブルの拡大となる。そして、初期値テーブルの拡大は、大規模なハードウェアを必要とする。つまり、初期値テーブルの拡大は、上記の乗算型除算方式における実装面積の利点を実現できないという問題点があった。
【００１５】
上記の問題を解決する方法として、初期逆数近似値を、小規模な初期値テーブルと線形補間とを用いて高精度に求める方法が、提案された（例えば、特許文献１及び２を参照）。
【００１６】
特許文献１に記載の逆数回路（以下、特許文献１と呼ぶ）は、線形補間を基に、初期逆数近似値を算出する。そして、特許文献１は、逆数を求めるための算出を高速及び高精度とするために、除数を、上位データと下位データと分けて処理を実行する。しかし、特許文献１は、近似区間の中央付近では、初期逆数近似値の誤差が大きくなるという問題点があった。
【００１７】
そこで、区間の中央付近でも誤差を小さくする方法が提案されている（例えば、特許文献２を参照）。
【００１８】
特許文献２に記載の逆数演算方式（以下、特許文献２と呼ぶ）は、除数の仮数部が採り得る区間（０．５から１．０）の端部を交点とする一次関数（特許文献２における「−ＣＸ＋Ｄ」）を算出する。そして、特許文献２は、区間内での誤差を小さくするため、区間中間点での誤差の半分に対応するように上記の一次関数を平行移動した一次関数（特許文献２における「−ＡＸ＋Ｂ」）を算出する。そして、特許文献２は、平行移動した一次関数を初期逆数近似値の算出に用いる。このように、特許文献２は、区間内での誤差の影響を低減している。
【先行技術文献】
【特許文献】
【００１９】
【特許文献１】特開平２−１５６３２８号公報
【特許文献２】特開昭６３−１６３６３０号公報
【発明の概要】
【発明が解決しようとする課題】
【００２０】
ここで、除数の区間の一例として、１．０から２．０の区間を想定する。この場合、区間の２つの端部の除数（１．０と２．０）に対応した正確な逆数は、それぞれ、「１．０」と「０．５」である。
【００２１】
この場合、特許文献２は、上記の一次関数のＣ及びＤとして、「０．５」と「１．５」を用いる。つまり、一次関数「−ＣＸ＋Ｄ」は、「−０．５Ｘ＋１．５」となる。そして、この場合の中間地点（Ｘ＝１．５）での誤差は、「｜１／１．５−（−０．５×１．５＋１．５）｜≒０．０８」となる。その結果、特許文献２は、誤差の半分の値に対応するように平行移動した一次関数として、「−０．５Ｘ＋１．４６」を用いる。その結果、特許文献２は、区間の２つの端部の除数（１．０と２．０）に対応した逆数として、「０．９６」と「０．４６」を算出する。
【００２２】
しかし、特許文献２の乗算回路に後続する処理（上記のニュートン法などの処理）は、区間の端部（例えば、除数「１．０」）に対応した逆数が、正確な値（例えば、「１．０」）であることを前提とした処理となっている場合がある。このような場合、特許文献２の結果は、後続処理を、正しく動作させない可能性がある。つまり、特許文献２は、区間の端部での値を保証しないという問題点があった。
【００２３】
さらに、特許文献２は、除数「２．０」の場合、逆数を、「０．５」より小さな値である「０．４６」と算出する。ここで、一般的に、情報処理装置において、小数を含むデータ形式は、二進数表現の浮動小数点形式である。浮動小数点形式は、仮数部と指数部とを備えている。
【００２４】
以下の、二進数の表記法を用いて説明する。なお、二進数は、数値を括弧で囲い、括弧に下付けで二進数を示す数値（２）を付して示す表記法を用いる。例えば、十進数の「２．０」及び「０．５」の二進数表現は、それぞれ、「（１０）２」及び「（０．１）２」となる。なお、十進数は、上記のような表記法を用いないで、そのままの表記とする。
【００２５】
繰り返しとなるが、除数「（１０）２」に対する正確な逆数は、「（０．１）２」である。一方、「（０．１）２」より小さい値（例えば、「０．４６」）は、二進数として一桁小さい値である「（０．０１ｄｄｄｄ）２」となる。
【００２６】
なお、上記において、「（０．０１）２」以下のデータは、以下の説明に関連しないため、「ｄｄｄｄ」と省略した表記とした。そのため、上記の各ｄは、必ずしも、同じ値を示しているわけではない。また、上記のｄの個数（桁数）も、４つに限るわけではなく、処理系に依存した数となる。
【００２７】
ここで、例えば、ＩＥＥＥ（Institute of Electrical and Electronics Engineers, Inc.）における浮動小数点演算の標準であるＩＥＥＥ７５４において、仮数部の数値の正規化が、必要である。つまり、上記の「（０．０１ｄｄｄｄ）２」は、仮数部として「（０．１ｄｄｄｄ）２」に修正することが、必要である。この修正に伴い、指数部に、一桁分のシフトが、発生する。このシフトは、指数部の値を「１」減らす操作である。そして、指数部の値の「１」減らすことは、アンダーフローを発生させる場合がある。つまり、上記の正規化に伴う指数部の値の変更は、アンダーフローを発生させる場合がある。
【００２８】
しかし、正確な逆数は、「０．５＝（０．１）２」である。そのため、上記のアンダーフローは、本来発生しないアンダーフローである。つまり、除数の値が「２．０＝（１０）２」の近傍の場合に発生するアンダーフローは、偽のアンダーフローである。
【００２９】
このように、特許文献２は、偽のアンダーフローを発生させるという問題点があった。
【００３０】
本発明の目的は、上記問題点を解決し、区間の端部での値の保証し、偽のアンダーフローを発生させない値を算出する情報処理装置、情報処理方法、及び、プログラムを提供することにある。
【課題を解決するための手段】
【００３１】
本発明の一形態における情報処理装置は、入力データが入力データの区間の端部のデータであるか否かを検出する端部検出手段と、所定の第１の関数に対する近似値を算出する第２の関数に入力データを適用した算出結果である加算結果が、入力データを第１の関数に適用した場合に発生しないアンダーフローである偽のアンダーフローを発生させるか否かを検知し、加算結果が偽のアンダーフローを発生させる場合に、加算結果を偽のアンダーフローを発生させない値に修正するアンダーフロー検知手段と、入力データが端部のデータの場合、端部に対応した所定のデータを選択し、入力データが端部のデータでない場合、加算結果を選択する選択手段と含む。
【００３２】
本発明の一形態におけるデータ処理方法は、入力データが入力データの区間の端部のデータであるか否かを検出し、所定の第１の関数に対する近似値を算出する第２の関数に入力データを適用した算出結果である加算結果が、入力データを第１の関数に適用した場合に発生しないアンダーフローである偽のアンダーフローを発生させるか否かを検知し、加算結果が偽のアンダーフローを発生させる場合に、加算結果を偽のアンダーフローを発生させない値に修正し、入力データが端部のデータの場合、端部に対応した所定のデータを選択し、入力データが端部のデータでない場合、加算結果を選択する。
【００３３】
本発明の一形態におけるプログラムは、入力データが入力データの区間の端部のデータであるか否かを検出する処理と、所定の第１の関数に対する近似値を算出する第２の関数に入力データを適用した算出結果である加算結果が、入力データを第１の関数に適用した場合に発生しないアンダーフローである偽のアンダーフローを発生させるか否かを検知する処理と、加算結果が偽のアンダーフローを発生させる場合に、加算結果を偽のアンダーフローを発生させない値に修正する処理と、入力データが端部のデータの場合、端部に対応した所定のデータを選択する処理と、入力データが端部のデータでない場合、加算結果を選択する処理とをコンピュータに実行させる。
【発明の効果】
【００３４】
本発明に基づけば、区間の端部での値を保証し、偽のアンダーフローを発生させない値を算出するとの効果を奏することができる。
【図面の簡単な説明】
【００３５】
【図１】図１は、本発明における第１の実施形態に係る情報処理装置の構成の一例を示すブロック図である。
【図２】図２は、第１の実施形態に係る情報処理装置の動作を説明するための図である。
【図３】図３は、第１の実施形態に係る情報処理装置の構成の変形例を示すブロック図である。
【図４】図４は、第１の実施形態に係る情報処理装置の構成の変形例を示すブロック図である。
【発明を実施するための形態】
【００３６】
次に、本発明における実施形態について図面を参照して説明する。
【００３７】
なお、各図面は、本発明における実施形態を説明するものである。ただし、本発明は、各図面の記載に限られるわけではない。また、各図面の同様の構成には、同じ番号を付し、その繰り返しの説明を、省略する場合がある。
【００３８】
また、以下の説明に用いる図面において、各実施形態の説明に関係しない部分の構成については、記載を省略し、図示しない場合もある。
【００３９】
なお、各実施形態において、近似対象の関数は、単純減少凸関数であれば、特に制限されない。例えば、近似対象の関数は、逆数関数「ｙ＝１／ｘ（ｘは正の実数）」でもよい。あるいは、近似対象の関数は、ｎ乗根の逆数関数「ｙ＝１／（ｘ１／ｎ）（ｎは２以上の整数、ｘは正の実数）」、又は、ｎ乗の逆数関数「ｙ＝１／（ｘｎ）（ｎは２以上の整数、ｘは正の実数）」でもよい。ただし、以下の説明では、一例として、近似対象の関数は、逆数関数「ｙ＝１／ｘ（ｘは正の実数）」とする。この関数は、既に説明した、除数に対応した逆数の算出に相当する。そのため、関数の独立変数（ｘ）を「除数」と呼ぶ場合もある。
【００４０】
各実施形態において、独立変数（ｘ）の範囲は、逆数関数が単純減少凸関数となる範囲であれば、特に制限されない。ただし、以下の説明では、独立変数（ｘ）の範囲は、１．０から２．０とする。なお、独立変数（ｘ）の範囲を、「区間」とも呼ぶ。また、区間の小さい側の端部（ｘ＝１．０）を「始点」と呼び、区間の大きい側の端部（ｘ＝２．０）を「終点」と呼ぶ。
【００４１】
また、各実施形態は、近似対象の関数を近似する関数として、一次関数（ｙ＝ａｘ＋ｂ）を用いるとする。独立変数（ｘ）が除数の場合、従属変数（ｙ）は、初期逆数近似値に相当する。また、「ａ」は、一次関数の傾きであり、「ｂ」は、ｙ切片である。
【００４２】
ただし、これは、各実施形態を限定するものではない。例えば、各実施形態は、二次以上の関数を用いてもよい。
【００４３】
＜第１の実施形態＞
図面を参照して、本発明における第１の実施形態に係る情報処理装置１９について説明する。
【００４４】
［構成の説明］
まず、本発明における第１の実施形態に係る情報処理装置１９の構成について説明する。
【００４５】
図１は、本発明における第１の実施形態に係る情報処理装置１９の構成の一例を示すブロック図である。
【００４６】
情報処理装置１９は、入力データ１００を受信し、受信した入力データ１００に対応する出力データ１０１を出力する。
【００４７】
なお、以下の説明おいて、入力データ１００は、除算における除数（より詳細には、除数を浮動小数点形式とした場合の仮数部）とする。また、出力データ１０１は、除数の逆数を算出するために用いられる初期逆数近似値とする。ただし、入力データ１００及び出力データ１０１は、これに限られない。
【００４８】
入力データ１００は、所定のビット数の上位（上位ビット）と、残りのビットである下位（下位ビット）に分かれている。
【００４９】
そして、図１に示されているように、情報処理装置１９は、傾き抽出部１０と、切片抽出部１１と、乗算部１２と、加算部１３と、端部検出部１４と、アンダーフロー検知部１５と、選択部１６とを含む。
【００５０】
傾き抽出部１０は、入力データ１００の上位ビットを基に、入力データ１００に対応した出力データ１０１の算出に適用する一次関数の傾き（ａ）を抽出する。傾き抽出部１０は、抽出した傾きを、切片抽出部１１及び乗算部１２に出力する。
【００５１】
なお、傾き抽出部１０は、予め、除数の上位ビットに対応した傾きのデータを保持している。例えば、傾き抽出部１０は、上位ビットに対応する傾きの値を、テーブル形式のデータ（以下、「傾きテーブル」と呼ぶ）として保持する。そして、傾き抽出部１０は、受信した上位ビットを用いて、傾きテーブルから「傾き」を抽出する。
【００５２】
切片抽出部１１は、傾き抽出部１０から傾きを受信する。そして、切片抽出部１１は、傾きを基に、一次関数のｙ軸の切片（ｙ切片）を抽出する。この切片は、上記の一次関数「ｙ＝ａｘ＋ｂ」の「ｂ」である。切片抽出部１１は、抽出した切片を加算部１３に出力する。
【００５３】
なお、切片抽出部１１は、予め、傾きに対応した切片のデータを保持している。例えば、切片抽出部１１は、傾きに対応する切片の値を、テーブル形式のデータ（以下、「切片テーブル」と呼ぶ）として保持する。そして、切片抽出部１１は、傾きを基に、切片テーブルから切片を抽出する。
【００５４】
図２を参照して、切片についてさらに説明する。
【００５５】
図２において、実線の曲線が、近似の対象である除数（ｘ）と逆数（ｙ＝１／ｘ）との関係に対応する関数（以下、「逆数関数Ｒ」と呼ぶ）を示す線である。
【００５６】
破線が、対象となる区間（今の場合、１．０から２．０）に対する、一般的な近似に用いられる一次関数（以下、「一般的な一次関数Ｍ」と呼ぶ）である。一般的な一次関数Ｍにおける区間の端部（１．０及び２．０）での値は、逆数関数Ｒの値と一致している。つまり、一般的な一次関数Ｍは、逆数関数Ｒの区間の両端部における値を基に算出された一次関数である。しかし、一般的な一次関数Ｍと逆数関数Ｒとの誤差は、図２に示されているように、区間の中央付近（「ｘ」の値が「２の平方根」となる点の近傍）において、極大値（区間内の最大誤差）となる。この誤差の値は、予め、算出可能である。
【００５７】
そこで、情報処理装置１９の切片抽出部１１は、図２において実線の直線に示されているように、上記の最大誤差の値の半分を削減（修正）した一次関数（以下、「本実施形態の一次関数Ｌ」と呼ぶ）を用いる。その結果、情報処理装置１９は、対象区間（今の場合、１．０から２．０の区間）にける最大誤差を半分とすることができる。
【００５８】
このように、本実施形態に切片抽出部１１は、区間における最大誤差を、より小さくする切片のデータを保持する。
【００５９】
図１を参照した説明に戻る。
【００６０】
このように、傾き抽出部１０及び切片抽出部１１は、本実施形態の一次関数Ｌの係数（ａとｂ）の値を抽出する構成である。なお、情報処理装置１９が、一次関数Ｌとは異なる関数を用いる場合、情報処理装置１９は、傾き抽出部１０及び切片抽出部１１に換えて、その関数のパラメータを算出する構成を含めばよい。
【００６１】
乗算部１２は、傾き抽出部１０から受信した傾きと、入力データ１００の下位ビットとを乗算する。乗算部１２は、乗算の結果を、加算部１３に出力する。
【００６２】
加算部１３は、乗算部１２から受信した乗算結果と、切片抽出部１１から受信した切片とを加算する。加算部１３は、算出の結果（加算結果）をアンダーフロー検知部１５に出力する。
【００６３】
このように、乗算部１２及び加算部１３は、入力データ１００を、本実施形態の一次関数Ｌに適用した算出結果（加算結果）を計算する構成である。つまり、加算結果は、近似対象である逆数関数Ｒ（以下、「第１の関数」とも呼ぶ）を近似する本実施形態の一次関数Ｌ（以下、「第２の関数」とも呼ぶ）に、入力データ１００を適用した算出結果（加算結果）である。
【００６４】
なお、情報処理装置１９が、一次関数Ｌとは異なる関数を用いる場合、情報処理装置１９は、乗算部１２及び加算部１３に換えて、その関数の結果を算出する構成を含めばよい。
【００６５】
アンダーフロー検知部１５は、受信した算出結果において、偽のアンダーフローが発生するか否か検知する。ここで、「偽のアンダーフロー」とは、既に説明したとおり、近似対象の逆数関数Ｒに入力データ１００を適用した場合には発生しないが、本実施形態の一次関数Ｌに入力データ１００を適用した場合に発生するアンダーフローである。偽のアンダーフローが発生する場合、アンダーフロー検知部１５は、受信した算出結果を、アンダーフローが発生しない所定の値（例えば、除数が「２．０」の場合の逆数「０．５」）に変更して（丸めて）から、選択部１６に出力する。偽のアンダーフローが発生しない場合、アンダーフロー検知部１５は、受信した算出結果を、選択部１６に出力する。なお、アンダーフロー検知部１５における、アンダーフローを検知する動作については、後ほど詳細に説明する。
【００６６】
端部検出部１４は、入力データ１００が端部のデータ（今の場合、１．０及び２．０）であるか否か検出する。端部検出部１４は、検出結果を基に、選択部１６に、入力データ１００が端部のデータであるとの結果、又は、端部のデータでないとの結果を出力する。なお、大きい側の端部（終点、今の場合「２．０」）は、後ほど説明するように、アンダーフローに対応した処理の対象となる。そのため、端部検出部１４は、入力データ１００が小さい側の端部のデータ（始点、今の場合は１．０）であるか否か検出してもよい。つまり、端部検出部１４は、入力データ１００が大きい側の端部のデータ（終点、今の場合は２．０）の検出を省略してもよい。以下では、説明を明確にするため、端部検出部１４は、入力データ１００が始点（今の場合は１．０）であるか否か検出するとして説明する。
【００６７】
選択部１６は、端部に対応した所定のデータ（例えば、端部に対応した正確な逆数の値）を受信している。なお、選択部１６は、予め、所定のデータを受信して、保持してもよい。あるいは、選択部１６は、初期値として、所定のデータを保持してもよい。なお、以下の説明では、選択部１６は、端部に対応した正確な逆数のデータ（例えば、始点（１．０）に対する逆数「１．０」）を保持しているとする。
【００６８】
そして、選択部１６は、端部検出部１４から端部（今の場合、「１．０」）であるとの結果を受信した場合、出力データ１０１として、端部に対応した所定のデータ（今の場合、正確な逆数の値「１．０」）を選択して、出力する。端部でないとの結果を受信した場合、選択部１６は、出力データ１０１として、アンダーフロー検知部１５から受信した算出結果を選択して、出力する。
【００６９】
［動作の説明］
次に、図２を参照して、情報処理装置１９の区間の端部での動作について、さらに説明する。
【００７０】
既に説明したとおり、情報処理装置１９の加算部１３は、入力データ１００を一次関数Ｌに適用した算出結果である加算結果を出力する。
【００７１】
しかし、情報処理装置１９は、初期逆数近似値の算出に用いる一次関数として、最大誤差の値の半分に修正した一次関数Ｌを用いる。つまり、情報処理装置１９が用いる一次関数Ｌにおいて、区間の端部（１．０及び２．０）での値は、逆数関数Ｒの値と一致しない。
【００７２】
そこで、情報処理装置１９は、以下で説明するように出力データ１０１を修正する。
【００７３】
（端部での修正）
まず、区間の端部での修正に関連する動作について説明する。なお、既に説明したとおり、区間の大きい側の端部である終点（２．０）は、後ほど説明するアンダーフローに対応する処理を実施される。そのため、以下は、区間の小さい側の端部である始点（１．０）について説明する。
【００７４】
前述のとおり、始点「１．０」における誤差は、逆数関数Ｒと一般的な一次関数Ｍとの最大誤差の値の半分に相当する。この誤差は、一般的な演算処理に適用された場合、必ずしも問題が発生させるわけではない。しかし、情報処理装置１９に後続する処理として、端部のデータ（例えば「１．０」）に対して正確な近似対象の逆数関数Ｒの値（今の場合「１．０」）を前提とした処理が、用いられている可能性がある。
【００７５】
そこで、情報処理装置１９は、端部検出部１４及び選択部１６を含む。すなわち、端部検出部１４は、入力データ１００が、端部のデータであるか否かを検出する。そして、端部検出部１４が、端部のデータ（例えば、始点である「１．０」）であると検出した場合、選択部１６は、端部に対応した所定のデータ（例えば、正確な逆数の値（今の場合、「１．０」））を選択して、出力する。
【００７６】
なお、端部検出部１４において、端部のデータとして検出される値は、一つの数値に限られない。例えば、端部検出部１４は、所定に範囲の入力データ１００に対して、端部のデータと検出してもよい。その場合、選択部１６は、端部に対応した所定のデータとして、所定の範囲のデータを、受信又は記憶すればよい。そして、端部に対応したデータが所定の範囲のデータの場合、選択部１６は、所定の範囲のデータに加え、所定の範囲のデータと端部のデータとの関係を示す情報を記憶する。そして、選択部１６は、端部検出部１４から端部のデータの情報を受信し、受信した端部のデータの情報を基に、所定の範囲のデータから端部に対応したデータを選択すればよい。以下、データが範囲となる場合を含め、「端部に対応した所定のデータ」と呼ぶ。
【００７７】
このような構成及び動作を基に、情報処理装置１９は、区間の端部での値を保証する。
【００７８】
その結果、情報処理装置１９の結果である初期逆数近似値を用いる後続処理は、正常に動作できる。
【００７９】
なお、上記の情報処理装置１９の動作は、出力データ１０１を初期逆数近似値とした場合、初期逆数近似値を、正確な逆数の値に修正する動作となっている。そのため、情報処理装置１９は、初期逆数近似値における誤差を削減している。
【００８０】
（偽のアンダーフローに対する修正）
次に、偽のアンダーフローに対する修正に関連する動作について説明する。
【００８１】
情報処理装置１９は、最大誤差の半分減じた一次関数Ｌを用いている。そして、図２に示されているように、一次関数Ｌは、独立変数（ｘ）大きい側（終点）において従属変数（ｙ）の値が小さくなる単調減少関数である。そのため、図２に示すように、偽のアンダーフローは、区間の大きい側の端部（終点、今の場合、「２．０」）の近傍、つまり、加算結果の最小値（今の場合、「０．５＝（０．１）２」）の近傍で発生する。
【００８２】
そこで、アンダーフロー検知部１５は、加算部１３からの加算結果における仮数部の値が、所定の閾値（今の場合「（０．１）２」）を下回る場合、加算結果の仮数部を、アンダーフローが発生しない所定の値（今の場合「（０．１）２」）に変更する（丸める）。つまり、アンダーフロー検知部１５は、偽のアンダーフローの検知として、加算結果と所定の閾値（今の場合、「（０．１）２」）との比較を用いる。そして、アンダーフロー検知部１５は、加算結果が所定の閾値より小さい場合に、加算結果を、アンダーフローが発生しない所定の値に（今の場合、「（０．１）２」）に修正する。
【００８３】
このように、アンダーフロー検知部１５は、加算部１３から受信した加算結果が、偽のアンダーフローを発生させるか否かを検知し、偽のアンダーフローを発生させる場合に、加算結果を変更する。
【００８４】
このような構成及び動作を基に、情報処理装置１９は、偽のアンダーフローの発生を抑止する。
【００８５】
なお、上記の情報処理装置１９の動作は、出力データ１０１を初期逆数近似値とした場合、初期逆数近似値を、正しい逆数の値に修正する（丸める）動作となっている。そのため、情報処理装置１９は、初期逆数近似値における誤差を削減している。
【００８６】
［効果の説明］
本実施形態に係る情報処理装置１９の効果について説明する。
【００８７】
以上説明したように、情報処理装置１９は、区間の端部における値を保証し、偽のアンダーフローを抑止できるとの効果を奏することができる。
【００８８】
その理由は、次のとおりである。
【００８９】
情報処理装置１９の端部検出部１４が、入力データ１００が端部であるか否かを検出する。そして、入力データ１００が端部の場合、選択部１６が、端部に対応した所定のデータを選択して、出力するためである。さらに、アンダーフロー検知部１５が、加算結果において偽のアンダーフローが発生するか否かを検知し、偽のアンダーフローが発生する場合、加算結果をアンダーフローが発生しない値に修正するためである。
【００９０】
［変形例１］
以上の説明した情報処理装置１９は、次のように構成される。
【００９１】
例えば、情報処理装置１９の各構成部は、ハードウェア回路で構成されてもよい。
【００９２】
また、情報処理装置１９において、各構成部は、ネットワーク又はバスを介して接続された複数の装置を用いて、構成されてもよい。
【００９３】
図３は、本変形例に係る情報処理装置１８の構成の一例を示すブロック図である。
【００９４】
情報処理装置１８は、端部検出部１４と、アンダーフロー検知部１５と、選択部１６とを含む。情報処理装置１８の端部検出部１４は、入力データ１００を基に、上記の説明における端部検出部１４と同様に動作する。アンダーフロー検知部１５は、図示しないネットワーク又はバスを介して、図示しない加算部１３に相当する構成から加算結果１０２を受信し、上記の説明におけるアンダーフロー検知部１５と同様に動作する。選択部１６は、上記の説明における選択部１６と同様に動作する。
【００９５】
このように構成された情報処理装置１８は、情報処理装置１９と同様の効果を得ることができる。
【００９６】
その理由は、次のとおりである。
【００９７】
情報処理装置１９の端部検出部１４が、入力データ１００が端部であるか否かを検出する。そして、入力データ１００が端部の場合、選択部１６が、端部に対応する所定のデータを選択して出力するためである。さらに、アンダーフロー検知部１５が、加算結果において偽のアンダーフローが発生する否かを検知し、偽のアンダーフローが発生する場合、加算結果をアンダーフローが発生しない値に修正するためである。
【００９８】
なお、情報処理装置１８は、本発明の実施形態における最小構成である。
【００９９】
［変形例２］
また、情報処理装置１９において、複数の構成部は、１つのハードウェアで構成されてもよい。
【０１００】
また、情報処理装置１９は、ＣＰＵと、ＲＯＭ（Read Only Memory）と、ＲＡＭ（Random Access Memory）とを含むコンピュータ装置として実現されてもよい。情報処理装置１９は、上記構成に加え、さらに、入出力接続回路（ＩＯＣ：Input / Output Circuit）と、ネットワークインターフェース回路（ＮＩＣ：Network Interface Circuit）とを含むコンピュータ装置として実現されてもよい。
【０１０１】
図４は、本変形例に係る情報処理装置６００の構成の一例を示すブロック図である。
【０１０２】
情報処理装置６００は、ＣＰＵ６１０と、ＲＯＭ６２０と、ＲＡＭ６３０と、内部記憶装置６４０と、ＩＯＣ６５０と、ＮＩＣ６８０とを含み、コンピュータ装置を構成している。
【０１０３】
ＣＰＵ６１０は、ＲＯＭ６２０からプログラムを読み込む。そして、ＣＰＵ６１０は、読み込んだプログラムに基づいて、ＲＡＭ６３０と、内部記憶装置６４０と、ＩＯＣ６５０と、ＮＩＣ６８０とを制御する。そして、ＣＰＵ６１０を含むコンピュータは、これらの構成を制御し、図１に示されている、傾き抽出部１０と、切片抽出部１１と、乗算部１２と、加算部１３と、端部検出部１４と、アンダーフロー検知部１５と、選択部１６としての各機能を実現する。
【０１０４】
ＣＰＵ６１０は、各機能を実現する際に、ＲＡＭ６３０又は内部記憶装置６４０を、プログラムの一時記憶として使用してもよい。
【０１０５】
また、ＣＰＵ６１０は、コンピュータで読み取り可能にプログラムを記憶した記憶媒体７００が含むプログラムを、図示しない記憶媒体読み取り装置を用いて読み込んでもよい。あるいは、ＣＰＵ６１０は、ＮＩＣ６８０を介して、図示しない外部の装置からプログラムを受け取り、ＲＡＭ６３０に保存して、保存したプログラムを基に動作してもよい。
【０１０６】
ＲＯＭ６２０は、ＣＰＵ６１０が実行するプログラム及び固定的なデータを記憶する。ＲＯＭ６２０は、傾きテーブル、切片テーブル、及び、端部に対応した所定のデータを保存してもよい。ＲＯＭ６２０は、例えば、Ｐ−ＲＯＭ（Programmable-ROM）又はフラッシュＲＯＭである。
【０１０７】
ＲＡＭ６３０は、ＣＰＵ６１０が実行するプログラム及びデータを一時的に記憶する。ＲＡＭ６３０は、例えば、Ｄ−ＲＡＭ（Dynamic-RAM）である。
【０１０８】
内部記憶装置６４０は、情報処理装置６００が長期的に保存するデータ及びプログラムを記憶する。また、内部記憶装置６４０は、ＣＰＵ６１０の一時記憶装置として動作してもよい。内部記憶装置６４０は、傾きテーブル、切片テーブル、及び、端部に対応した所定のデータを保存してもよい。内部記憶装置６４０は、例えば、ハードディスク装置、光磁気ディスク装置、ＳＳＤ（Solid State Drive）又はディスクアレイ装置である。
【０１０９】
ここで、ＲＯＭ６２０と内部記憶装置６４０は、不揮発性（non-transitory）の記憶媒体である。一方、ＲＡＭ６３０は、揮発性（transitory）の記憶媒体である。そして、ＣＰＵ６１０は、ＲＯＭ６２０、内部記憶装置６４０、又は、ＲＡＭ６３０に記憶されているプログラムを基に動作可能である。つまり、ＣＰＵ６１０は、不揮発性記憶媒体又は揮発性記憶媒体を用いて動作可能である。
【０１１０】
ＩＯＣ６５０は、ＣＰＵ６１０と、入力機器６６０及び表示機器６７０とのデータを仲介する。ＩＯＣ６５０は、例えば、ＩＯインターフェースカード又はＵＳＢ（Universal Serial Bus）カードである。
【０１１１】
入力機器６６０は、情報処理装置６００の操作者からの入力指示を受け取る機器である。入力機器６６０は、例えば、キーボード、マウス又はタッチパネルである。
【０１１２】
表示機器６７０は、情報処理装置６００の操作者に情報を表示する機器である。表示機器６７０は、例えば、液晶ディスプレイである。
【０１１３】
ＮＩＣ６８０は、ネットワークを介した図示しない外部の装置とのデータのやり取りを中継する。ＮＩＣ６８０は、例えば、ＬＡＮ（Local Area Network）カードである。
【０１１４】
このように構成された情報処理装置６００は、情報処理装置１９と同様の効果を得ることができる。
【０１１５】
その理由は、情報処理装置６００のＣＰＵ６１０が、プログラムに基づいて情報処理装置１９と同様の機能を実現できるためである。
【０１１６】
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されるものではない。本願発明の構成及び詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【符号の説明】
【０１１７】
１０    傾き抽出部
１１    切片抽出部
１２    乗算部
１３    加算部
１４    端部検出部
１５    アンダーフロー検知部
１６    選択部
１８    情報処理装置
１９    情報処理装置
１００    入力データ
１０１    出力データ
６００    情報処理装置
６１０    ＣＰＵ
６２０    ＲＯＭ
６３０    ＲＡＭ
６４０    内部記憶装置
６５０    ＩＯＣ
６６０    入力機器
６７０    表示機器
６８０    ＮＩＣ
７００    記憶媒体
【要約】      （修正有）【課題】区間の端部での値を保証し、偽のアンダーフローを発生させない値を算出する情報処理装置を提供する。【解決手段】情報処理装置は、入力データ１００が入力データの区間の端部のデータであるか否かを検出する端部検出部１４と、所定の第１の関数に対する近似値を算出する第２の関数に入力データを適用した算出結果である加算結果が、入力データを第１の関数に適用した場合に発生しないアンダーフローである偽のアンダーフローを発生させるか否かを検知し、加算結果が偽のアンダーフローを発生させる場合に、加算結果を偽のアンダーフローを発生させない値に修正するアンダーフロー検知部１５と、入力データが端部のデータの場合、端部に対応した所定のデータを選択し、入力データが端部のデータでない場合、加算結果を選択する選択部１６と、を含む。【選択図】図１【図１】
0006048560.tif 000002
【図２】
0006048560.tif 000003
【図３】
0006048560.tif 000004
【図４】
0006048560.tif 000005