(57)【要約】【課題】パイプライン数値演算装置の論理規模圧縮には必要最小限のビット幅で数値を扱うことが効果的であり、有効桁のみを扱う手法が考えられるが、誤差のキャンセルが生じる場合には無効桁に含まれる有用な情報が含まれ、無効桁を除去しただけでは精度の良い演算装置を構成することができないという問題があった。【解決手段】誤差のキャンセルは、値とこれに含まれる要因毎の誤差の指標を対として扱い、演算に伴う個々の誤差要因の伝播をトレースすることにより検出することが可能であり、誤差のキャンセルが生じている箇所で無効桁を含む演算を行いえるよう論理を構成することで誤差のキャンセルが生じた場合にも高い精度が保たれる演算装置を形成することができる。この手法は一般の演算に際しても、誤差の挙動を把握し、安全で信頼性の高い演算結果を求めるアルゴリズムとしても有用である。【選択図】図１
2015170028.tif 000002
【特許請求の範囲】
【請求項１】
数値演算装置もしくはこのための数値演算論理を形成するソフトウエアであって、値とこれに含まれる誤差の最大偏差に対応する誤差指標とを対として扱うこと、該誤差指標は値と同一の単位を持つ符号付数値であって、互いに独立な誤差要因に対応する複数の指標の組（これを誤差ベクトルと呼ぶ）であること、演算の各工程において演算結果として得られる値を算出すると共に演算結果に含まれる誤差ベクトルを算出すること、演算結果の誤差ベクトルの自乗を誤差分散とみなして演算結果の有効桁を求めること、を特徴とする数値演算装置もしくはこのための数値演算論理を形成するソフトウエア。
【請求項２】
請求項１記載の装置もしくはソフトウエアであって、演算結果の誤差ベクトルは、後記工程１ないし工程３により得られる式により算出されることを特徴とする、数値演算装置もしくはこのための数値演算論理を形成するソフトウエア。ここで工程１は、値の演算式に含まれる変数をそれぞれ関数に置き換えて関数の演算式を得ること、工程２は、前記関数演算式の両辺を微分すること、工程３は、前記微分された演算式に現れる関数を変数に、関数の微係数を関数に対応する変数の誤差ベクトル要素に置き換えること、により遂行される。
【請求項３】
請求項１ないし請求項２記載の装置もしくはソフトウエアであって、値と誤差ベクトルの各要素を、指数部を共有する浮動小数点形式で取り扱うことを特徴とする数値演算装置もしくはこのための数値演算論理を形成するソフトウエア。
【請求項４】
請求項１ないし請求項３記載の装置もしくはソフトウエアであって、値と誤差ベクトルの各要素とが同時に並列演算されることを特徴とする数値演算装置もしくはこのための数値演算論理を形成するソフトウエア。
【請求項５】
請求項１ないし請求項４記載の数値演算論理を形成するソフトウエアであって、演算処理の手続きを規定するフローダイアグラム（演算機能を有する機能ブロックのリストと、信号線によるそれぞれの演算機能ブロックの入出力間の接続関係をフローダイアグラムと呼ぶ）とフローダイアグラムに対する外部入力の値の取りえる範囲が事前に与えられること、少なくとも代表的な入力値の組み合わせのそれぞれに対して演算処理の各段階が出力する値と誤差の各要素の指標を求め、有用な情報のみを後段に伝達するに必要な出力信号線の各要素のビット幅を求め、これら入力値の組み合わせの全てに対して得られた出力信号線の各要素のビット幅のそれぞれの最大値を、形成される数値演算論理の該当する部分の信号線の各要素のビット幅として数値演算論理を形成すること、を特長とするソフトウエア。
【請求項６】
請求項１ないし請求項5記載の装置もしくはソフトウエアであって、与えられた演算仕様に含まれる演算機能のいずれかにおいて入力信号の誤差に支配的な誤差要素の相殺を検出し、これを警告する手段を有することを特徴とする数値演算装置もしくはこのための数値演算論理を形成するソフトウエア。
【請求項７】
請求項１ないし請求項６記載のソフトウエアであって、演算処理の手続きを規定するフローダイアグラムと入力値の取りえる範囲が事前に与えられること、少なくとも代表的な入力値の組み合わせの各々に対して、演算器の出力する値と誤差の各要素の指標を求め、有用な情報を後段に伝達するに必要な出力信号線の各要素のビット幅を求めること、該フローダイアグラムを構成するそれぞれの演算機能において入力信号の誤差に支配的な誤差要素の相殺の有無を検査して、誤差の相殺が検出された際には前段に遡って無効桁を含む信号を出力する演算論理を形成することを特徴とする、数値演算論理を形成するためのソフトウエア。
【請求項８】
与えられた演算過程に含まれる各演算の遂行に際して値とこれに含まれる誤差を表す誤差指標とを共に演算すること、該誤差指標は値と同一の単位を持つ符号付数値であって互いに独立な誤差要因の少なくともいずれかに対応する一つもしくは複数の指標の組（これを誤差ベクトルと呼ぶ）であること、いずれかの演算を遂行する際に誤差指標の相殺が検出された際にこれを警告することを含む数値演算アルゴリズムであって、演算結果の誤差ベクトルを算出する式が後記工程１ないし工程３によりられる式であることを特徴とする数値演算アルゴリズム。ここで工程１は、値の演算式に含まれる変数をそれぞれ関数に置き換えて関数の演算式を得ること、工程２は、前記関数演算式の両辺を微分すること、工程３は、前記微分された演算式に現れる関数を変数に、関数の微係数を関数に対応する変数の誤差ベクトルに置き換えること、により遂行される。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、数値演算装置及びこのための数値演算論理を自動形成するソフトウエアに関わる。
【背景技術】
【０００２】
多数のデータを高速処理する分野では、レジスタを解して多数の演算器を配置したパイプライン演算装置が用いられている。このような装置では、それぞれの演算に異なる演算器が割り当てられるため、各演算器の扱う数値の有効桁に応じたビット幅の演算器を配置することで演算装置全体の論理規模を圧縮することができる。このための具体的手法に関しては、特許文献1、非特許文献１及び非特許文献２に解説されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開2011-232963（公開日:2011年11月17日）
【非特許文献】
【０００４】
【非特許文献１】情報処理学会シンポジウムシリーズVol.2010, No.7, p3-8(2010)
【非特許文献２】情報処理学会シンポジウムシリーズVol.2012, No.5, p115-120(2012)
【発明の概要】
【発明が解決しようとする課題】
【０００５】
非特許文献1は、有効桁のみを扱うことにより論理規模を圧縮するパイプライン演算処理論理の構成手法を扱うものであるが、演算過程において誤差がキャンセルされる際に生じる問題に言及がなされている。すなわちたとえば、Ｐ＝Ａ＋ＢとしてＰを演算した後にＲ＝Ｐ−Ｂを演算する場合、全体でＲ＝Ａであるため、Ｂに含まれる誤差は最終結果であるＲには含まれない。しかし、Ｐを演算する際にＢに含まれる誤差が支配的である場合には、これによりＰの有効桁が制約され、Ａに含まれる有用な情報が失われるという問題が生じる。非特許文献1では、この問題への対処を演算アルゴリズムの設計に委ねている。すなわちこの例であれば、Ｒ＝Ａを直接計算することによりＢに含まれる誤差の影響を排除することができる。しかしながら、一般的な問題、特に複雑な演算過程を含む問題に対してかかる処理を施すことは困難を伴う。
【０００６】
今日では科学技術計算に際して倍精度浮動小数点表現が多く利用されている。倍精度浮動小数点数の精度は十進換算で1５桁にのぼる。これは、通常の科学技術計算で必要とされる精度（３〜６桁）に比べて非常に高い。かかる高精度を有する表現が使用される一つの理由は、後段で誤差のキャンセルがなされた場合にも有用な情報を伝達する点にあるが、誤差のキャンセルを伴わない多くの演算において大量の無駄な演算が行われる一方で、十進１５桁の分解能が誤差のキャンセルへの対応に十分である保証もない。
【０００７】
パイプライン処理においては、それぞれの演算処理に専用の演算器が割り当てられ、取り扱われる数値の最大の有効桁数に基づいた最適な演算器を用いることができる。誤差のキャンセルの発生を事前に把握することができれば、関連する演算器を必要なビット幅に構成することも可能である。しかしながら一般的には、ＣＰＵ処理と同様に、十分なビット幅で演算処理を行うことでこの問題を回避している。パイプライン処理においては、多数の演算器が使用されるため、個々の演算器で無駄な演算を行うことによる経済的損失は特に大きい。
【課題を解決するための手段】
【０００８】
この問題は、誤差要因毎の誤差の大きさを要素とする誤差ベクトルを変数値と対として扱い、演算に際しては変数の値を演算すると同時に、演算結果に含まれる誤差ベクトルの各要素を同時に演算することで解決される。ここで誤差の大きさは、その誤差が含まれる値と同一の単位で測られる量であり、予想される誤差の幅や誤差の最大値などを用いることができる。以下、単に「誤差」と記す量は、この意味での誤差の大きさを意味する。また、以下の議論では誤差を最大偏差で表記することを前提とする。この表記法では、デジタル化に伴う誤差は、最下位桁の値の１／２となる。
【０００９】
また、本発明においては、誤差を符号付の数値として扱うことで、設計段階で誤差のキャンセルが発生する可能性を検出することを可能とする。これを利用した設計支援ソフトウエアは、誤差のキャンセルが検出された際に設計者に警告してアルゴリズムの見直しを促したり、自動的に精度確保に必要な処置を施す。誤差キャンセルが発生する箇所においてかかる対処がなされることから、それ以外の箇所では冗長なビット長の演算は不要となり、必要最小限の論理資源により演算装置を構成することが可能となる。
【００１０】
本発明で扱う誤差ベクトルの自乗、すなわち誤差の要素の自乗和は、誤差分散に対応する。こうして得られる誤差分散は、要因別の誤差の大きさを反映したものであり、これを利用して演算結果の仮数部分の幅を調整することで、演算器内部で取り扱う数値および演算結果に含まれる無効桁の管理がより精密になされる。また、この手法では値の自乗と誤差分散を比較することにより、値がゼロとみなされるか否かを統計的に判定することも可能であるが、従来の誤差情報を扱わない数値演算装置ではかかる処理は不可能であった。
【００１１】
また、本発明においては、演算実行時に誤差情報が不要である場合には、演算器に誤差ベクトルを演算する手段を備える必要もなく、これを省略することによって数値演算装置の論理規模は更に圧縮される。この場合には、数値演算論理を形成するソフトウエアで事前にシミュレーションを行い、演算工程における誤差ベクトルの推移と誤差キャンセルの発生状況を評価して、各演算器に要求されるビット幅を定めればよく、演算に際しては演算結果を出力信号線のビット幅におさまるように適宜調整すればよい。
【００１２】
更に、本発明になるアルゴリズムを通常の計算業務に応用することも可能である。すなわち本発明の提案する手法によって値と誤差ベクトルを同時に算出すれば、演算結果の値と同時にこれに含まれる誤差の大きさも把握され結果の信頼性を判定することができるほか、演算過程において誤差のキャンセルが生じている場合はこれを検出することが可能であり、演算手順が妥当であるか否かの判断も可能となる。
【発明の効果】
【００１３】
本発明によれば、演算過程で取り扱う数値に含まれる誤差が要因別に管理されるため、数値の精度が正しく評価され、信頼性の高い演算結果を得ることができる。これを演算論理の設計に応用すれば、必要最小限のビット幅で演算器を構成することが可能となり、必要最小限の論理規模で数値演算装置が実現される。
【００１４】
さらに、本発明によれば、誤差キャンセルの発生が検出可能であり、これを警告して演算アルゴリズムの改善を促すことも、あるいは前段出力の誤差分散管理範囲を拡大して有用な情報を全て伝達する演算処理論理を形成することも可能である。これにより、意味のある情報の毀損が防止され、精度の高い演算結果を得ることができる。本発明の原理に基づく誤差の推定手法と誤差キャンセル検出手法は、一般の科学技術計算などにも応用することができ、これを用いることにより演算結果の信頼性が検証されるほか、誤差のキャンセルを検出して演算アルゴリズムの改善を促すことも可能である。
【図面の簡単な説明】
【００１５】
【図１】は本発明になる単位演算処理装置のブロック図である。
【図２】は本発明に基づく数値演算装置に好適な浮動小数点表現を示す概念図である。
【図３】は、演算過程における値と誤差ベクトルをシミュレートするためのソフトウエアのフロー図である。
【図４】は、図３の示すシミュレーションソフトウエアに、誤差のキャンセルへの対応機能を付加したシミュレーションソフトウエアのフロー図である。
【図５】は、演算論理を形成するためのソフトウエアのフロー図である。
【図６】は、ファンクションダイアグラムの一例に、値と誤差ベクトルの変遷を追記した図である。
【発明を実施するための形態】
【００１６】
本発明はさまざまな形態で実施可能であることから、まずこれらに共通する原理を説明する。数値演算処理は、一つもしくは複数の数値に対して種々の演算操作を施すことにより遂行される。このとき、数値のあるものは誤差を含み、演算操作を経る毎に値と誤差の双方が変形を受ける。本発明の基本は、数値の値と共に要因別の誤差の指標となる値を用い、演算過程において数値の値と誤差指標の値の変化を共にトレースする点にある。
【００１７】
誤差の指標には、数値の値と同じ単位を有する符号付指標を用いる。これは、たとえば、誤差を含む値がＡ±ａの範囲にあるとき、最大偏差であるａを誤差指標として用いることを意味する。また、これに定数ｃを乗じたｃ×ａを指標としても良く、標準偏差σやこれを定数倍したｃ×σも同様に誤差指標として用いることができる。誤差の指標は符号付で扱う。以下の説明では、最大偏差、すなわち上記ａを誤差の指標に用いた場合について説明する。他の指標を用いる際は、かかる指標を定数倍して最大偏差に換算すれば、以下の説明はそのまま適応することができる。
【００１８】
演算に対して入力として与えられる変数および内部で定義される定数のそれぞれが誤差を含み得る。これらに含まれる誤差は、誤差要因毎に独立に変動する。すなわち、誤差指標ａをもつ変数Ａと、誤差指標ｂをもつ変数Ｂの加算（Ａ＋Ｂ）が行われて結果がＲに格納される場合、Ｒには二種類の誤差指標ａおよびｂが含まれる。これらの誤差指標は互いに独立に変動するため、演算結果の誤差指標はこれらを加えたものとすることはできない。演算結果の誤差指標として、それぞれの要因をそのままの形で保持する必要がある。そこで、誤差をベクトルの形式で表示し、要因別の誤差指標をベクトルの要素として保持することとする。
【００１９】
各種演算結果の誤差ベクトルは以下の諸式で算出される。ここで、ＡおよびＢは変数値、Ｒは結果の値、Ｃは定数、eは添字の変数に対応する誤差ベクトルである。
【数１】
2015170028.tif 000003
【００２０】
数式１の（１）〜（６）をみれば、誤差ベクトルの算出式は、値を算出する式の微分形式で与えられていることがみてとれる。すなわち、さまざまな演算に対応する誤差ベクトルの算出式は次の手順で導出される。まず、目的となる演算式を書き下し、変数を関数とみなして微係数を求める。たとえばＲ＝ＡＢの微係数は積の微分公式よりＲ’＝ＢＡ’＋ＡＢ’で与えられる。この式に現れる微係数（Ａ’，Ｂ’，Ｒ’）をそれぞれ誤差ベクトルに書き直し、関数を変数に戻すことで演算結果の誤差ベクトルを求める式（この例では数式１の（４）式）が得られる。このような関係が成り立つのは、誤差も微係数も、値に対する微小な変化量を扱っており、いずれにおいても変化量の高次の項が無視できるためである。基本的な演算以外にも大多数の関数の微分公式は知られているため、この手法を用いれば任意の演算式および関数に対して誤差ベクトルを算出する式を得ることができる。
【００２１】
誤差ベクトルの自乗、すなわち誤差ベクトルの各成分を自乗したものの総和を誤差分散と呼ぶ。誤差分散は値に含まれる誤差の大きさを示す指標であり、その平方根に誤差指標の定義に依存する定数を乗じることにより値の信頼区間を得ることができる。たとえば、誤差指標として最大偏差を用いる場合には、誤差分散の平方根そのものを値の信頼区間と、実用上、みなすことができる。
【００２２】
本発明の一つの優位性は、誤差を要因別にトレースしていることから、誤差の独立性を反映した正しい誤差分散が得られる点にある。たとえば、互いに独立な誤差を持つ二つの変数ＡおよびＢを加算して得られる結果Ｒの誤差分散はＡの誤差分散とＢの誤差分散の和で与えられることが知られており、二つの入力変数の誤差分散が同じ値を取る場合には加算結果Ｒの誤差分散は入力変数の誤差分散の二倍となる。一方変数Ａに定数Ｃを乗じた結果の誤差分散はＡの誤差分散にＣの自乗を乗じた値となることが知られており、加算Ａ＋Ａの結果の誤差分散はＡの誤差分散の４倍となる。同じ加算であるにもかかわらず、独立な誤差因子を持つ変数を加算した結果の誤差分散は２倍となり、同じ誤差因子を持つ変数を加算した場合には誤差分散は４倍となる。この違いを正しく計算するためには、加算演算器の入力値に含まれる誤差要因を識別して取り扱う必要がある。本発明の手法を用いれば、以下に説明するように、これらは正しく算出することが可能となる。
【００２３】
本発明の手法では、変数Ａの誤差ベクトルを（ａ，０）、変数Ｂの誤差ベクトルを（０，ｂ）で与える。加算Ａ＋Ｂの結果の誤差ベクトルは（ａ，０）＋（０，ｂ）＝（ａ，ｂ）となる。Ａの誤差分散はａの自乗、Ｂの誤差分散はｂの自乗で与えられ、加算結果の誤差分散はａの自乗とｂの自乗の和で与えられ、双方の誤差が同じ値であれば演算結果の誤差分散はその二倍と計算される。一方、加算Ａ＋Ａの結果の誤差ベクトルは（ａ，０）＋（ａ，０）＝（２ａ，０）となり、加算結果の誤差分散は２ａの自乗となり、Ａの誤差分散（ａの自乗）の４倍と正しく計算される。演算式が単純な場合には、複数の同じ誤差要因を持つ変数を一つの変数にまとめ上げることも不可能ではないが、複雑な演算過程を経た結果として得られた同じ誤差要因を含む変数同士が演算される場合もあり得、式の変形だけで常にこの問題に対処できるとは限らない。本発明の用いている手法では、それぞれの変数に含まれる誤差指標を要因別に保持することで、いかなる複雑な演算過程を経ようとも、それぞれの変数に含まれる要因別の誤差指標が与えられ、いかなる箇所であっても正しい誤差分散を容易に算出することが可能である。
【００２４】
多くの場合、誤差分散は演算過程で増加するが、同じ誤差要因を含む変数間で演算が行われる場合には誤差分散が減少する場合もある。たとえば、数式１の(２)式および（５）式には誤差ベクトル間の減算が含まれており、同じ誤差要因を同じ符号で含む場合にはその値がキャンセルされる。また、誤差ベクトル間の加算を含む(１)式および（４）式においては、同じ誤差要因を異なる符号で含む場合に、誤差のキャンセルが発生する。
【００２５】
誤差キャンセルの生じる簡単な例として、Ｐ＝Ａ＋Ｂなる加算演算をおこなった後に、Ｒ＝Ｐ−Ｂなる演算を行う場合を考えよう。全体の演算を通せば、Ｂは二つの演算により相殺され、Ｒ＝Ａとなる。すなわちＢに含まれる誤差は結果に影響を与えない。この演算に際して、Ｂの値が非常に大きく、従って誤差指標も非常に大きい場合には、Ｐを得た段階でＢに含まれる誤差要因によってＰの有効桁の制約により変数Ａのもつ情報が失われるという問題が生じる。今日一般に使用されている倍精度浮動小数点数は、十進１５桁の有効桁を伝達可能であるが、指数部の値により十進で最大６００桁あまり異なる値の表現が可能である。すなわち、ＢはＡよりも十進で６００桁大きい値を持つ可能性もあり、数式上は本来得られる結果（Ｒ＝Ａ）も、前段での浮動小数点演算の結果Ａに含まれていた情報が失われてしまうという問題も起こりえる。この問題は、取り扱う数値のビット幅に合わせて演算器を最小化したパイプライン数値演算器において、特に大きな問題となる。
【００２６】
このような問題は、演算実行中、もしくはこれに先立つ演算過程のシミュレーションにより、誤差のキャンセルを検出して対処することによって解決される。事前のシミュレーションによって誤差のキャンセルが検出された場合は、演算のアルゴリズム見直しにより、誤差のキャンセルが生じない方式に変更するか、あるいは後段で誤差のキャンセルが発生する変数の桁数を十分な幅の無効桁を含む形に設定して他の有用な情報の毀損を防止することで対処可能である。また、演算中に誤差のキャンセルを検出する場合は、演算結果の信頼性を毀損するような有効桁の損失が発生した場合に、割り込みなどの手段によりこれをエラーとして処理することもできる。本発明の手法を用いれば、演算の全過程を通して値に含まれる誤差が要因別に管理されているため、個々の演算における誤差のキャンセル検出も容易であり、このような処置を容易に実現することが可能である。
【００２７】
次に、本発明のそれぞれの実施形態について個別に説明する。
【００２８】
本発明は、パイプライン演算装置の論理規模縮小を主たる目的としている。パイプライン演算装置は、多数の演算論理回路の組み合わせによって構成され、ＡＳＩＣと呼ばれる特定用途向け集積回路上、ないしＦＰＧＡ（フィールド・プログラマブル・ゲート・アレー）と呼ばれるプログラム可能な論理素子上に形成される場合が多い。前者はマスクによって固定的な論理回路を形成するものであり、後者はデバイス内部に設けられたメモリー内容により内部に設けられた論理回路の動作および接続関係が規定される。これらの演算動作を規定する演算論理は、通常、専用のソフトウエアを用いて、抽象度の高い演算仕様からマスクのＣＡＤデータもしくはＦＰＧＡの内部メモリーへの書き込みデータに変換する。このため本発明は、最終的には数値演算装置として使用に供されるが、工業的には演算論理を形成するソフトウエアに組み込む形で応用される。
【００２９】
パイプライン方式の演算処理論理は、データフローマシン、すなわち多数の演算器を配置して、これらの間を数値情報が順次流れる形で構成される。データフローマシンの動作を指定する一つの方法は、非特許文献1に開示された、四則演算や種々の関数演算を処理する機能ブロックを信号線で接続する形で規定する方法である。機能ブロックの配置と接続関係の規定する図をファンクションダイアグラムと呼ぶ。ファンクションダイアグラムは、直接これを文字形式で規定することも可能であるが、非特許文献2に開示されたように、専用のコンパイラソフトウエアを用いて数式の形で記述された演算仕様をファンクションダイアグラムに変換するのが効率的である。
【００３０】
有用な情報のみを後段に伝達するためには、それぞれの信号線の数値は浮動小数点形式で表現する必要がある。浮動小数点形式としては、ＩＥＥＥ７５４に規定される形式、すなわち仮数部に整数部を1に固定した固定小数点数を用いて整数部の1を省略する方式が広く用いられている。この方式は仮数部のビット長を1ビット節約できる利点があるが、0を表現するために特別なビットパターンが必要であり、これを取り扱う論理構成が複雑になる欠点がある。この欠点は、特に多数の演算器を配置するパイプライン処理で深刻である。
【００３１】
パイプライン処理には、非特許文献1に開示された浮動小数点形式が好適である。これは、仮数部と指数部を共に整数で表現するもので、数値の型を整数部と指数部の値のとりえる範囲で規定する方式である。本発明では、これに誤差ベクトルを追加した浮動小数点表現が用いる。有効桁のみを扱う場合、誤差分散は値の仮数部の最下位桁を単位として１／４以上１未満に管理される。誤差分散は誤差ベクトルの各要素の自乗和であるため、各要素の最大値は仮数部の最下位桁を単位として１未満となり、仮数部の整数部は符号ビットを含めて１ビットで十分である。伝達する数値にSビットの無効桁を含める場合には、誤差ベクトルの各要素の整数部ビット幅は１＋Sとなる。誤差の仮数部には小数部も必要とされることから、誤差の仮数部はFビットの小数部を持つ固定小数点形式で表現する。これにより、誤差ベクトルの各要素の仮数部ビット幅は１＋Ｓ＋Ｆとなる。これらを含むパイプライン処理に好適な浮動小数点形式を図２に示す。同図において、Ｘは共通の指数部、Ｍは値の仮数部、Ｏ、Ｕ、Ｎは異常を示すフラグであってそれぞれオーバーフロー、アンダーフロー、数値化不能の異常を示すフラグ、Ｅ１からＥＮが誤差ベクトルの各要素であり、無効桁数をＳとするとき整数部が１＋Ｓビット、小数部がＦビットの幅を持つことを示している。
【００３２】
誤差の仮数部は数値の仮数部の最下位桁の重みを単位として表示される。これを共通単位に変換するには、数値の指数部を用いた浮動小数点数として扱えばよい。数値の指数部と誤差の指数部に同じ値を用いることは、格納場所を節約する効果の他に、演算結果に含まれる誤差を算出するための論理が簡素化される利点もある。加減算においては双方の指数部を合わせるように仮数部のシフトが行われるが、指数部を共通にすることにより、値も誤差も同じ量だけシフトすればよく、シフトの論理が簡素化される。また、乗除算においては、値の演算と誤差の演算の全ての項で指数部は同一となるため、個別の演算は仮数部に対してのみ必要となる。
【００３３】
それぞれの機能ブロックは演算論理形成ソフトウエアによって演算論理に変換される。演算論理形成ソフトウエアは、特許文献1および非特許文献1に開示されているが、その概要を示すと次のようになる。
【００３４】
ファンクションダイアグラムは、これに含まれる機能ブロックのリストと外部入出力のリストで規定される。機能ブロックを表現するデータ構造は、その機能を実現する演算論理を形成する関数へのポインタと、入出力ポートに接続される信号線のリスト、およびこの作業完了フラグをもつ。信号線を表現するデータ構造には、信号源となる機能ブロックまたは外部入力へのポインタと、信号線の行き先となる機能ブロックまたは外部出力へのポインタのリストが含まれる。信号源となる機能ブロックの作業完了フラグは、その信号線の型が決定済みであるか否かを示す。ファンクションダイアグラムの外部入力の数値の型は事前に与えらている。
【００３５】
外部入力の誤差は特段の指定がない限り独立であると仮定して、誤差ベクトルの各成分をそれぞれの外部入力に割り当てる。それぞれの誤差の値は、これに接続される信号源に含まれる誤差が既知である場合はその最大偏差を用い、そうでない場合は値の仮数部の最下位桁の重みに相当する誤差があると仮定して定数1／２を与える。その他、外部入力の誤差の間の統計的性質が既知である場合は、これに応じた誤差ベクトルを準備する。たとえば、複数の外部入力の誤差に相関がある場合は、各外部入力で独立に変動する誤差成分に加えて、誤差の一つまたは複数の主成分を相関する外部入力に共通の誤差成分として与える。
【００３６】
演算論理形成ソフトウエアは、ファンクションダイアグラムに含まれる機能ブロックを一つずつ検査し、その全ての入力ポートに接続された信号線の型が決定済みであり、かつ機能ブロックの演算論理への変換作業が完了していない場合に、演算論理形成関数を呼び出して該機能ブロックを実現する論理を形成すると共に、その出力ポートに接続された信号線の型を決定し、作業完了フラグを立てる。ファンクションダイアグラムに含まれる全ての機能ブロックの変換が完了するまでこの操作を繰り返し行うことで、全ての機能ブロックに対応する演算論理が形成され、これに接続される信号線の型が定まる。なお、このような手法が成り立つのはフィードバックループを有しない、信号が一方向にのみ流れるファンクションダイアグラムである必要がある。非特許文献2では、ファンクションダイアグラムにこのような制約を課すための数式記述規約を設けている。
【００３７】
誤差のキャンセルにより演算結果の誤差分散が入力の誤差分散よりも小さくなると、演算結果の仮数部に含まれる無効桁数を要求された範囲とするため、入力値の仮数部分の下位を繰り入れて出力の仮数桁を拡張する必要が生じる。しかしながら、これに必要な仮数部下位桁が入力に含まれていなければこのような操作は行い得ない。このような事態は、事前に演算過程をシミュレーションすることで検出することができる。
【００３８】
演算過程のシミュレーションは、ファンクションダイアグラムに対する入力信号の、全ての、もしくは代表的な組み合わせに対して演算過程での値と誤差ベクトルの伝播をシミュレートすることで行われる。これを行うために、機能ブロックのデータ構造に、当該機能ブロックにおける演算をシミュレートする関数へのポインタを設け、信号線のデータ構造に値と誤差ベクトルを格納する領域を設けておく。
【００３９】
シミュレーションの具体的手順を図３に示す。計算は全ての入力値の組み合わせについて行う。それぞれの入力値を与えた後、変化のある限り機能ブロックリストをスキャンしてその演算をシミュレートする関数ｅｖａｌを呼び続ける。関数ｅｖａｌは、当該機能ブロックの評価が完了しており、かつ全ての入力が定義済みである場合に出力値とその誤差ベクトルの演算を行い、真を返して変化が生じたことを呼び出し元に通知する。これらの条件が成立しておらず、出力値の演算が行われない場合は、偽を返して変化が生じなかったことを呼び出し元に通知する。出力値と誤差ベクトルを演算した際に、誤差のキャンセルが発生したか否かを判定し、問題となるような誤差のキャンセルが発生した場合にはこれを通知し、あるいは適切な処置を行う。
【００４０】
誤差のキャンセルが検出された際の一つの対応方法は、アルゴリズムを見直すことである。これを行う場合は、シミュレーションプログラムは誤差キャンセルの発生箇所と深刻さの度合いをレポートして作業者にこれを通知し、アルゴリズムの見直しを促す。数式２はアルゴリズムの見直しにより誤差のキャンセルを解消する一例を示したもので、(１)に示す二次式の一つの解が（２）式で与えられている。（２）式はＢが平方根の内外二箇所に現れており、Ｂが正の場合はＢに含まれる誤差がキャンセルする。特に、Ｂの値がＣに比べて非常に大きい場合、平方根内部の減算においてＣに含まれる情報はＢの誤差によって覆い隠されてしまう。このような場合には、（２）式を（３）式に変形すれば、誤差のキャンセルは発生せず、Ｃが小さな値である場合にも正しい結果が得られる。そこで、Ｂが正に限られる場合は（３）式を用い、Ｂの符号が正負に変化する場合は双方の演算を行い、Ｂの符号によりいずれかの結果を選択するように論理を構成すればよい。
【数２】
2015170028.tif 000004
【００４１】
誤差キャンセルへのもう一つの対応方法は、入力信号に十分な幅の無効桁を含め、キャンセルされる誤差によって覆われている有効な情報を正しく伝達するよう論理を構成することである。パイプライン演算において図２に示す浮動小数点形式で信号線を形成する場合、誤差分散は数式３で与えられ、演算結果の誤差分散の仮数部を４のＳ−１乗から４のＳ乗の範囲におさまるよう、仮数部Ｘを定めることで、出力信号線に含まれる無効桁幅がＳとなるように調整がなされる。
【数３】
2015170028.tif 000005
【００４２】
誤差のキャンセルを防ぐに必要な入力信号の無効桁幅は、次のようにして求めることができる。たとえば誤差を含む二つの値を加減算においては、入力信号の指数部が一致するよう指数部の小さい側の入力信号の仮数部を右シフトした後、仮数部を加減算して演算結果の仮数部を得、入力信号の最大の指数部を演算結果の指数部とする。ついで、上記調整を行うが、誤差のキャンセルが生じている場合には、演算結果の誤差分散が小さくなり、誤差分散の仮数部を所定の範囲に保つためには、演算結果の指数部を減少させ、演算結果の仮数部桁数を増加させる必要が生じる。これは、値の仮数部の加減算をより下位の桁まで行うことで実現されるが、指数部の小さい側の入力信号の仮数部は演算に際して右シフトを行っておらず、元々使用したよりも下位の桁は入力されていない。また、指数部の大きい側の入力信号の仮数部に関しても、仮数部桁数の不足分が仮数部の加減演算に先立つ右シフト数よりも大きい場合には入力信号仮数部の桁不足が発生する。
【００４３】
入力信号仮数部の桁数不足に対応するため、信号線を表現するデータ構造に、その信号線に含める無効桁数要求を示す整数値を設けておく。そして、機能ブロックの演算論理への変換作業中に、誤差のキャンセルが生じて入力の無効桁数不足が見出された場合には、当該入力信号線の無効桁要求値を増加させ、その信号線に値を出力している機能ブロックの作業完了フラグの取り消し処理を行う。作業完了の取り消し処理は、当該機能ブロックの作業完了フラグをリセットするとともに、その出力信号線を入力とする機能ブロックで作業完了したものについても、作業完了の取り消し処理を再帰的に行う。
【００４４】
なお、この処理で追加する意味のある無効桁は、この機能ブロック以前に切り捨てられた桁が上限であり、それ以上の桁を追加することは意味をなさない。そこで、信号線には前段で切捨てが発生していることを示す切り捨て発生フラグを設け、このフラグが立っている信号線に対してのみ、無効桁要求の増加処理を行う。切捨て発生フラグは、機能ブロックの変換作業時に、その機能ブロックの内部で切捨てが発生したか、あるいは当該演算の入力信号線の切捨て発生フラグがセットされている場合にセットされる。
【００４５】
図４は無効桁要求処理を追加したシミュレーションソフトウエアのフローチャートであり、出力値を計算する前段階で、出力値を計算するに十分な桁数が入力されているか否かを検査し、不足がある場合は不足が生じた入力信号線の無効桁要求を増加させ、該信号線の信号源となっている機能ブロックの検査終了フラグをリセットする。この場合は、出力値のセットは行われていないが、検査終了フラグが書き換えられているため、真を返して変化があったことを呼び出し元に通知する。
【００４６】
次に、パイプライン方式の数値演算装置に用いる演算論理を自動形成するソフトウエアの機能ブロック変換処理フローチャートを図４に示す。演算仕様は機能ブロックを表すデータ構造のリスト（ファンクションダイアグラム）として与えられ、そのデータ構造には各機能ブロックの入出力間を接続する信号線の情報が含まれている。この処理は、シミュレーションによる誤差のキャンセルへの対処が完了した後に呼び出され、それぞれの信号線のビット幅はすでに設定されており、出力線に要求される無効桁数は確定している。演算論理自動形成ソフトウエアは、与えられたファンクションダイアグラムに含まれる全ての機能ブロックに対して、変化がある限り機能ブロックに付属する変換処理関数を呼び出す。
【００４７】
機能ブロックの種類毎に準備された演算論理形成関数は、その機能ブロックの論理形成処理を行う条件が整っていることを確認する。この条件は、当該機能ブロックに対する処理が完了しておらず、かつ全ての入力ポートの信号源となる機能ブロックの処理が完了していることである。条件が整っていない場合は、関数の値として偽を返し、論理形成処理が行われなかったことを呼び出し元に通知する。機能ブロックの論理形成処理を行う条件が整っている場合は、論理形成処理を行い、当該機能ブロックの処理完了フラグをセットし、真を返すことで処理が行われたことを呼び出し元に通知する。
【００４８】
誤差のキャンセルが生じている場合、前段での無効桁とみなされる桁も後段に送ることで、可能な最良精度での演算が可能となるが、このような演算が常に要求されるわけではない。すなわち、入力信号の特殊な組み合わせでのみ誤差のキャンセルが発生する場合、これに対応するために演算論理規模を拡大することはコストの増大を招くため、必ずしも実用的ではない。このような場合には、無効桁要求もしくは信号線のビット幅に上限を設け、誤差キャンセルへの対応を制限すればよい。この場合、演算結果の誤差分散として当初期待された値の前提であった入力仮数部の下位が入力されていないため、入力値には仮数部最下位の１／２に相当する量子化誤差が含まれ、演算結果は大きな誤差を含むこととなる。このため、誤差キャンセルへの対応を制限して形成された数値演算装置は、誤差キャンセルが発生した際に最良精度での演算が行われず演算結果の誤差は増大する。ただしこのような場合であっても、入力仮数部の丸め誤差に配慮して誤差指標を演算することにより、演算結果の誤差は正しく把握される。
【００４９】
以上、パイプライン演算装置への応用を中心に説明したが、この手法は、科学技術計算などの精度、信頼性が重視される一般的な数値計算においても応用可能である。この場合は、上記で説明したシミュレーションと同様に、値と誤差ベクトルを対として扱い、演算過程でのこれらの変化を追跡して、誤差のキャンセルを検出して警告を発すればよい。この目的には、一般的にＩＥＥＥ７５４形式の浮動小数点数を用いた演算が行われるが、たとえば倍精度浮動小数点数の場合には十進１５桁の分解能を持ち、何の対処を行わない場合でも多くの場合は無効桁の処理が行われている。誤差キャンセルが問題となるのは、これを上回る無効桁要求が発生した場合であり、このような事態が発生した場合にのみ警告すればよい。本発明の手法のもう一つの利点は、この手法によれば、誤差キャンセル発生の有無に係わらず、演算結果に含まれる誤差分散も同時に得られ、結果の信頼性を常に把握することが可能である点である。
【実施例】
【００５０】
以下、数式２の(２)式に相当する演算論理をプログラマブルロジックデバイスを用いて構成する例について説明する。
【００５１】
大規模な論理回路を構成する目的に適したプログラマブルロジックデバイスは、今日ＦＰＧＡ（フィールド・プログラマブル・ゲート・アレー）と呼ばれるデバイスとしてザイリンクス、アルテラ他のいくつかのメーカが供給している。このデバイスに所望の動作をさせるには、ＶＨＤＬ、ＶｅｒｉｌｏｇＨＤＬ等のハードウエア記述言語で演算仕様を記述し、回路合成および配置配線を行うソフトウエアによりデバイスに与えるデータに変換する。これらの変換ソフトウエアは、デバイスメーカやツールベンダから入手可能である。本発明になる演算論理を形成するためには、全ての演算論理を直接ハードウエア記述言語で書き下して形成することも不可能ではないが、このための専用ソフトウエアを用いて、ファンクションダイアグラムからハードウエア記述に機械的に変換するのが簡便である。このための具体的な手法は、非特許文献２に開示されているほか、各種の手法が知られている。
【００５２】
図６は数式２の(２)式に対応するファンクションダイアグラムの模式図である。図中の矩形は機能ブロックで、ｍｕｌは加算、ｓｕｂ１およびｓｕｂ２は減算、ｓｑｒｔは平方根演算の機能をそれぞれ有する。ファンクションダイアグラムは、外部入出力線のリスト（入力がＢおよびＣ、出力がＲ４）および内部に含まれる機能ブロックのリスト（ｍｕｌ、ｓｕｂ１、ｓｑｒｔ、ｓｕｂ２）として与えられる。機能ブロックのデータ構造には、入出力信号線へのポインタリストと、シミュレーションのための出力評価関数へのポインタ、および演算論理を形成する関数へのポインタ、および作業完了フラグが含まれている。信号線のデータ構造には信号源である機能ブロックへのポインタと、信号の行き先である機能ブロックへのポインタのリストおよび信号線の数値型が含まれる。信号線の数値型は、仮数部と指数部の取りえる値の範囲とその信号線に要求される無効桁数と仮数部の最大ビット幅、および複数の異常を表す信号線の有無からなり、このほかに作業用変数として、仮数部、指数部および誤差ベクトルの各要素の一時的な値を格納する変数と、仮数部の値が以前に切り捨て処理を施されているか否かを示すフラグを含む。各信号線に要求される無効桁は、これにあわせて数値演算論理を形成するという意味でそれぞれの信号線に固有の数値であるが、実際に必要とされる無効桁は入力値の組み合わせに依存するため、無効桁要求に係わる情報として、要求される無効桁数の他に、無効桁を含む最大の仮数部ビット幅も信号線の属性として保持する。
【００５３】
数値演算論理の作成手順として、まず、機能ブロックのリストとしてファンクションダイアグラムを作成する。この工程は、個々の機能ブロック配置とこれらの入出力間を接続する信号線を人手で記述することによっても作成可能であるが、より抽象的な言語形式で記述された演算手順から自動形成することが効率的であり好ましい。この具体的手段に関しては、非特許文献２に詳細に述べられている。ファンクションダイアグラムの外部入力となる信号線に対しては、あらかじめその信号線の浮動小数点形式、すなわち浮動小数点形式を構成する各要素の有無とそれぞれの要素の値の取りえる範囲を与えておく。また、外部入力の誤差ベクトルの各要素の値も事前に設定する。外部入力信号に含まれる誤差が互いに独立である場合は、それぞれの外部入力の誤差ベクトルの異なる要素に値を設定する。これらの値は、事前に誤差の大きさが与えられている場合にはその値を、そうでない場合はデジタル化に伴って必然的に発生する量子化誤差として１／２を与える。
【００５４】
ついで、図４に示されるフローチャートに沿って、入力信号線のそれぞれの値の組み合わせに対して値と誤差指標の伝播状況のシミュレーションを行う。図４には、「全ての入力値の組み合わせについて」と記したが、この部分は適当に間引いてシミュレーションを行うことも可能である。その場合でも、全ての外部入力信号線の仮数部と指数部の最大値と最小値の全ての組み合わせに対しては、シミュレーションを行うことが好ましい。それぞれの入力値を設定した後、全ての機能ブロックの作業完了フラグをリセットし、変化がある限り、各機能ブロックの出力信号線の評価を繰り返し行う。
【００５５】
図４（ｂ）は、それぞれの機能ブロックに付随する出力評価関数のフローチャートである。その機能ブロックに対する評価がすでに完了している場合、および入力信号線の値が確定していない場合は、当該機能ブロックの評価はスキップされ、偽を返して呼び出し元に変化が生じていないことを通知する。入力信号線の値は、信号源である機能ブロックの評価が完了していれば値が確定している。また、信号源を持たない入力信号線は、外部入力であるか、あるいは定数であるため、無条件に評価完了とみなされる。演算結果の評価は、まず、値と誤差ベクトルの演算を数式１に従って行う。ついで、数式３に従って誤差分散を評価し、誤差分散の仮数部が所定の範囲となるように出力信号線の指数部を決定し、最後に出力信号線の仮数部を決定する。出力信号線の仮数部を演算するために必要な入力信号線の仮数部が不足する場合は、誤差のキャンセルが発生していることを意味する。
【００５６】
入力信号線の無効桁不足が検出された場合は、当該入力信号線の無効桁要求を増加させ、この信号線の信号源である機能ブロックの作業完了を取り消す処理を行う。作業完了取り消し処理は、当該機能ブロックの作業完了フラグをリセットすとともに、この機能ブロックの出力信号線を入力としている機能ブロックに対しても、それが作業完了状態である場合には、作業完了取り消し処理を再帰的に行う。
【００５７】
図６には、各部の値と誤差ベクトルの要素の演算式を示した。誤差ベクトルの要素の値は、変数の値を仮数部と指数部に分け、かつ仮数部を二倍にして示している。ｓｕｂ１およびｓｕｂ２の減算に際しては、入力された値の指数部が一致するよう仮数部のシフトを行った後に演算がなされる。このため、各誤差指標もシフト演算が行われ、これに応じて指数部が増減する。これによる指数部の変化は図６においては、指数部変数名に一つまたは二つのダッシュをつけて異なる値であることを示している。シミュレーションの過程においては、外部入力であるBおよびCに順次値が設定され各部の値が順に計算される。この図において、ｓｕｂ２の機能ブロックを評価する際、誤差ベクトルの第一要素の演算式にＤ−Ｂなる演算が含まれ、Ｂが正の場合にこの部分で誤差のキャンセルが発生する。そこでこの評価関数は入力信号Ｒ３に無効桁要求を設定し、その信号源である機能ブロックｓｑｒｔの完了取り消し処理を行い、変化が生じた旨を呼び出し元に通知する。この結果、呼び出し元、すなわち図４における変化のある限りの繰り返しループは再度実行され、作業完了フラグがリセットされたｓｑｒｔの評価が改めて行われる。この評価の際、出力信号線には無効桁を含むよう要求がなされているため、この要求に応えた形で演算論理を形成するためには入力信号にも無効桁が必要となり、今度は入力信号線Ｒ２の無効桁要求を設定して、その信号源である機能ブロックｓｕｂ１の作業完了フラグの取り消し処理が行われる。これを繰り返すことで、最初の切捨てが行われたｍｕｌに至るまでの間、無効桁を出力するよう設定がなされる。
【００５８】
ついで、図５に示す処理フローに従って、数値演算論理の形成が行われる。処理に先立って、各機能ブロックの作業完了フラグを全てリセットし、変化のある間、ファンクションダイアグラムを構成する全ての機能ブロックに対して、それぞれの演算論理形成関数（ｃｏｄｅｒ）を呼び出して演算論理を形成する。演算論理形成関数は、その演算論理がまだ形成されておらず、かつこれを形成するに必要な入力信号の設定が完了していることをチェックした後、入力信号線の型属性と出力信号線の無効桁要求に従って演算論理を形成して、呼び出し元に真を返すことで演算論理の形成が行われたことを通知する。その他の場合は、偽を返して何の作業も行われなかったことを通知する。この操作を繰り返すことで、与えられたファンクションダイアグラムに含まれる全ての機能ブロックは数値演算論理に変換される。
【００５９】
数値演算論理形成関数の形成する演算論理の一般的なブロック図を図１に示す。この図は、誤差ベクトルの演算を実装する演算論理について示したものであって、入力信号（１）および（２）は、値の仮数部（１ａ）、（２ａ）、指数部（１ｂ）および（２ｂ）と、（１ｃ）〜（１ｆ）および（２ｃ）〜（２ｆ）の誤差ベクトルから構成され、それぞれ値の演算器（３）および誤差指標の演算器（４ａ）〜（４ｄ）で数式１に示された演算を行う。これらの結果は正規化演算器（５）により、所定の無効桁を含む形に成形され、演算結果（６）として出力される。値および誤差ベクトルの各要素は同時に並行して演算されるため、演算に必要な時間はさほど増加しない。また、誤差ベクトルの各要素の仮数部ビット幅は、値の仮数部に比較して小さなものでよく、このための論理資源の増大はさほど大きなものではない。更に、演算実行時に誤差に係わる情報が不要である場合は、誤差のキャンセルに対応しうる信号線幅をあらかじめシミュレーションで決定し、誤差の演算部分は非実装とすることもできる。この場合は、正規化演算器（５）は、演算結果の仮数部があらかじめ定められた出力仮数部の信号線幅に収まるよう、最小限の仮数部の右シフトを行い、シフト数に応じた指数部の増加を行うよう論理を構成すればよい。
【００６０】
誤差情報を演算する論理は、数値演算装置の内部に実装することも、実装しないことも可能である。数値演算装置の内部に誤差情報演算論理を実装すれば、演算実行時に誤差情報を利用できるほか、演算結果の誤差分散が把握される信頼性の高い演算装置が得られるが、誤差を演算する論理を実装するために論理規模は増大する。数値演算実行時に誤差情報を利用しないのであれば、数値演算装置の内部に誤差情報演算論理を実装しないことも可能である。この場合は、シミュレーションによって把握した、各入力値の組み合わせにおいて必要な無効桁を含む値の転送に必要な仮数部ビット幅の最大値で各信号線を規定し、演算結果の仮数部がこれを上回る場合のみに仮数部桁数の縮小処理を行う形に演算論理を形成すればよい。
【産業上の利用可能性】
【００６１】
以上詳細に説明したように、本発明によれば演算過程の誤差の各要素の挙動が把握され、これを利用することにより誤差のキャンセルの検出が可能となり、安全に数値演算を遂行することが可能となる。これは特に、パイプライン数値演算装置において、多数設置されるそれぞれの演算器の論理規模を必要な最小限度まで縮小することを可能とし、安価な高速数値演算装置を構成することが可能となる。また、誤差情報を含む浮動小数点数を扱うことで、演算結果の信頼性判定を可能とすると共に、従来の浮動小数点数では不可能であった、値がゼロであるか否かの統計的判定が可能となる等の利点も生じる。この手法の応用範囲は、パイプライン数値演算装置への応用にとどまらず、一般の数値演算へも応用可能であり、広い分野で数値演算の信頼性改善が可能となる。
【符号の説明】
【００６２】
図１における記号の意味はそれぞれ次のとおりである。
（１）および（２）は入力信号線である。
（１ａ）および（２ａ）は入力信号線の値の仮数部である。
（１ｂ）および（２ｂ）は入力信号線の共通の指数部である。
（１ｃ）ないし（１ｆ）および（２ｃ）ないし（２ｆ）は誤差の各要素の仮数部である。
（３）は値の演算器である。
（４ａ）ないし（４ｄ）は誤差の演算器である。
（５）は演算結果の値の仮数部に含まれる誤差分散を所定の範囲に収める正規化演算器である。
（６）は出力信号である。
【００６３】
図２における記号の意味はそれぞれ次のとおりである。
Ｘは共通の指数部である。
Ｍは値の仮数部である。
Ｏ、Ｕ、Ｎは異常フラグで、それぞれオーバーフロー、アンダーフロー、数値化不能を意味する。
Ｅ１ないしＥＮは要因別の誤差指標である。
【００６４】
図３~図５における各記号の意味はそれぞれ次のとおりである。
ｃｈａｎｇｅｄは、変化が生じたか否かの情報を保持する論理変数である。
ｅｖａｌは、演算をシミュレートする関数である。
ｃｏｄｅｒは、論理ブロックを数値演算論理に変換する関数である。
ｆｕｎｃは、処理中の論理ブロックのデータ構造へのポインタである。
ｔｒｕｅは真を、ｆａｌｓｅは偽をそれぞれ示す。
【００６５】
図６における記号の意味はそれぞれ次のとおりである。
Ｃ、Ｂは入力変数で、それぞれの値を示している。
ｍｕｌ、ｓｕｂ１、ｓｑｒｔ、ｓｕｂ２はそれぞれ演算を行う機能ブロックであり、ｍｕｌは乗算器、ｓｕｂ１およびｓｕｂ２は減算器、ｓｑｒｔは平方根演算器である。
Ｒ１ないしＲ４は各演算機能ブロックの出力であり、それぞれの値を示している。
ｅｃ、ｅｂおよびｅ１ないしｅ４はＣ、Ｂ，およびＲ１ないしＲ４に含まれる誤差ベクトルを表す。
【図１】
2015170028.tif 000006
【図２】
2015170028.tif 000007
【図３】
2015170028.tif 000008
【図４】
2015170028.tif 000009
【図５】
2015170028.tif 000010
【図６】
2015170028.tif 000011