(57)【要約】  本発明では、対数形式で表された実数および／または複素数を用いて対数演算を実行する方法と装置について記載されている。一例示的な実施形態において、ＡＬＵは対数極形式で表された複素数に対数演算を実行する。本実施形態によれば、ＡＬＵのメモリは複素数の対数を決定するために用いる参照表を格納し、一方、ＡＬＵ内のプロセッサは、格納された参照表を用いて、対数極形式で表された複素数入力オペランドに基づいて出力対数を生成する。別の例示的な実施形態において、ＡＬＵは対数形式で表された実数および複素数に対数演算を実行する。この実施形態において、メモリは２個の参照表、すなわち１個は実数の対数を決定するもの、１個は複素数の対数を決定するものを格納し、一方、プロセッサは、実数または複素数の参照表を用いて、各々対数形式で表された実数または複素数入力オペランドに基づいて出力対数を生成する。
2008502037.tif 000002
【特許請求の範囲】
【請求項１】
出力対数を計算するＡＬＵであって、
実数の対数を決定するための第１の参照表、および複素数の対数を決定するための第２の参照表を格納するメモリと、
実数入力オペランド用に前記第１の参照表、および複素数入力オペランド用に前記第２の参照表を用いて、対数形式で表された２個の入力オペランドに基づいて出力対数を生成する共有プロセッサとを含むＡＬＵ。
【請求項２】
前記出力対数が、前記入力オペランドの和または差の対数を表わす、請求項１に記載のＡＬＵ。
【請求項３】
前記ＡＬＵが、前記第１の参照表または前記第２の参照表を用いて、前記入力オペランド間の差の対数と、前記入力オペランドの和の対数とを同時に生成すべく構成されたバタフライ回路を含む、請求項１に記載のＡＬＵ。
【請求項４】
前記バタフライ回路が、
選択された入力オペランドを、前記第１または第２の参照表により提供される差分値と組み合わせて、前記入力オペランド間の差の対数を生成する第１のコンバイナと、
前記選択された入力オペランドを、前記第１または第２の参照表により提供される合計値と組み合わせて、前記入力オペランドの和の対数を生成する第２のコンバイナとを含む、請求項３に記載のＡＬＵ。
【請求項５】
前記共有プロセッサが、
前記第１または第２の参照表に基づいて１個以上の部分出力を計算すべく構成された参照コントローラと、
前記部分出力に基づいて出力対数を生成すべく構成された出力アキュムレータとを含む、請求項１に記載のＡＬＵ。
【請求項６】
前記出力対数を生成すべく用いられる部分出力の個数が、前記出力対数の所望の精度に基づいている、請求項５に記載のＡＬＵ。
【請求項７】
前記共有プロセッサが、前記出力対数を決定すべく前記参照コントローラにより２回以上の反復を実行し、各々の反復が前記部分出力の１個を生成する、請求項５に記載のＡＬＵ。
【請求項８】
前の反復の間に生成された部分出力に基づいて、現在の反復用の実数または複素数入力を生成すべく構成された入力アキュムレータをさらに含む、請求項７に記載のＡＬＵ。
【請求項９】
前記出力アキュムレータが、選択された入力オペランドおよび各々の反復の間に生成された部分出力に基づいて前記出力対数を生成する、請求項７に記載のＡＬＵ。
【請求項１０】
前記共有プロセッサが、絶対値が最大である入力オペランドを選択すべく構成された選択回路をさらに含む、請求項９に記載のＡＬＵ。
【請求項１１】
前記参照コントローラが、多段パイプラインを含んでいて、前記多段パイプラインの各段が前記部分出力の１個を生成する、請求項５に記載のＡＬＵ。
【請求項１２】
前記パイプラインの各段が、前記第１および第２の参照表の選択された部分を格納する、請求項１１に記載のＡＬＵ。
【請求項１３】
前記パイプラインの少なくとも１個の段が、実数段階入力を用いて前記第１の参照表の選択された部分を実行するか、または複素数段階入力を用いて前記第２の参照表の選択された部分を実行して、前記部分出力の１個を生成する、請求項１２に記載のＡＬＵ。
【請求項１４】
前記複素数入力オペランドの各々が、絶対値部分および位相部分を含む、請求項１に記載のＡＬＵ。
【請求項１５】
前記複素数入力オペランドの絶対値部分に基づいて、複素数入力の絶対値部分を生成する絶対値アキュムレータと、
前記複素数入力オペランドの位相部分に基づいて、前記複素数入力の位相部分を生成する位相アキュムレータとを含んでいる入力アキュムレータをさらに含む、請求項１４に記載のＡＬＵ。
【請求項１６】
ＡＬＵにおいて出力対数を計算する方法であって、
実数の対数を決定するための第１の参照表を格納するステップと、
複素数の対数を決定するための第２の参照表を格納するステップと、
実数入力オペランド用に前記第１の参照表、および複素数入力オペランド用に前記第２の参照表を用いて、共有プロセッサ内において対数形式で表された２個の入力オペランドに基づいて出力対数を生成するステップとを含む方法。
【請求項１７】
前記２個の入力オペランドに基づいて出力対数を生成するステップが、前記入力オペランドの和または差に基づいて出力対数を生成するステップを含む、請求項１６に記載の方法。
【請求項１８】
前記２個の入力オペランドに基づいて出力対数を生成するステップが、前記第１の参照表または前記第２の参照表を用いて、前記入力オペランド間の差の出力対数と、前記入力オペランドの和の出力対数とを同時に生成するステップを含む、請求項１６に記載の方法。
【請求項１９】
前記出力対数を同時に生成するステップが、
前記入力オペランド同士の比較に基づいて入力オペランドを選択するステップと、
前記選択された入力オペランドを、前記第１または第２の参照表により提供される差分値と組み合わせて、前記入力オペランド間の差の出力対数を生成するステップと、
前記選択されたオペランドを、前記第１または第２の参照表により提供される合計値と組み合わせて、前記入力オペランドの和の出力対数を生成するステップとを含む、請求項１８に記載の方法。
【請求項２０】
前記２個の入力オペランドに基づいて出力対数を生成するステップが、
前記第１または第２の参照表に基づいて１個以上の部分出力を計算するステップと、
前記部分出力に基づいて出力対数を生成するステップとを含む、請求項１６に記載の方法。
【請求項２１】
前記出力対数を決定すべく２回以上の反復を実行するステップをさらに含み、各々の反復が前記部分出力の１個を生成する、請求項２０に記載の方法。
【請求項２２】
前の反復の間に生成された部分出力に基づいて、現在の反復用の入力を生成するステップをさらに含む、請求項２１に記載の方法。
【請求項２３】
前記部分出力に基づいて出力対数を生成するステップが、多段パイプラインの各段において生成された部分出力に基づいて出力対数を生成するステップを含む、請求項２０に記載の方法。
【請求項２４】
前記多段パイプラインの各段について、前記第１および第２の参照表の選択された部分を格納するステップをさらに含む、請求項２３に記載の方法。
【請求項２５】
前記パイプラインの少なくとも１段において、実数または複素数段階入力に基づいて、前記第１または第２の参照表の選択された部分を各々実行して、前記部分出力の１個を生成するステップをさらに含む、請求項２４に記載の方法。
【請求項２６】
前記複素数入力オペランドの各々が、絶対値部分および位相部分を含む、請求項１６に記載の方法。
【請求項２７】
前記複素数入力オペランドの絶対値部分に基づいて、複素数入力の絶対値部分を生成するステップと、
前記複素数入力オペランドの位相部分に基づいて、前記複素数入力の位相部分を生成するステップとさらに含む、請求項２６に記載の方法。
【請求項２８】
複素数の出力対数を計算するＡＬＵであって、
複素数の対数を決定するための参照表を格納するメモリと、
前記格納された参照表を用いて、対数極形式で表された複素数入力オペランドの算術的組み合せの出力対数を生成するプロセッサとを含むＡＬＵ。
【請求項２９】
前記プロセッサが、前記参照表に基づいて、前記複素数入力オペランド間の差の出力対数と、前記複素数入力オペランドの和の出力対数とを同時に計算すべく構成されたバタフライ回路を含む、請求項２８に記載のＡＬＵ。
【請求項３０】
前記バタフライ回路が、
選択された入力オペランドを、前記参照表により提供される差分値と組み合わせて、前記複素数入力オペランド間の差の出力対数を生成する第１のコンバイナと、
前記選択された入力オペランドを、前記参照表により提供される合計値と組み合わせて、前記複素数入力オペランドの和の出力対数を生成する第２のコンバイナとを含む、請求項２９に記載のＡＬＵ。
【請求項３１】
前記プロセッサが、
前記参照表に基づいて１個以上の部分出力を計算すべく構成された参照コントローラと、
前記部分出力に基づいて出力対数を生成すべく構成された出力アキュムレータとを含む、請求項２８に記載のＡＬＵ。
【請求項３２】
前記プロセッサが、前記出力対数を生成すべく前記参照コントローラにより２回以上の反復を実行し、各々の反復が前記部分出力の１個を生成する、請求項３１に記載のＡＬＵ。
【請求項３３】
前の反復の間に生成された部分出力に基づいて、現在の反復用の複素数入力を生成すべく構成された入力アキュムレータをさらに含む、請求項３２に記載のＡＬＵ。
【請求項３４】
前記参照コントローラが、多段パイプラインを含んでいて、前記多段パイプラインの各段が前記部分出力の１個を生成する、請求項３１に記載のＡＬＵ。
【請求項３５】
前記複素数入力オペランドが絶対値部分および位相部分を含む、請求項２８に記載のＡＬＵ。
【請求項３６】
前記複素数入力オペランドの絶対値部分に基づいて、複素数入力の絶対値部分を生成する絶対値アキュムレータと、
前記複素数入力オペランドの位相部分に基づいて、前記複素数入力の位相部分を生成する位相アキュムレータとを含んでいる入力アキュムレータをさらに含む、請求項３５に記載のＡＬＵ。
【請求項３７】
前記位相部分が前記複素数入力の最上位部分を含み、前記絶対値部分が前記複素数入力の最下位部分を含む、請求項３５に記載のＡＬＵ。
【請求項３８】
前記参照表が絶対値参照表および位相参照表を含む、請求項３７に記載のＡＬＵ。
【請求項３９】
前記複素数入力の最上位部分が前記位相参照表をアドレス指定し、前記複素数入力の最下位部分が前記絶対値参照表をアドレス指定する、請求項３８に記載のＡＬＵ。
【請求項４０】
複素数の出力対数を計算する方法であって、
複素極形式で表された複素数の対数を決定するための参照表を格納するステップと、
前記格納された参照表を用いて、対数極形式で表された複素数入力オペランドに基づいて出力対数を生成するステップとを含む方法。
【請求項４１】
前記複素数入力オペランドに基づいて出力対数を生成するステップが、前記参照表に基づいて、前記複素数入力オペランド間の差の出力対数と、前記複素数入力オペランドの和の出力対数とを同時に計算するステップを含む、請求項４０に記載の方法。
【請求項４２】
前記出力対数を生成するステップが、
前記参照表に基づいて１個以上の部分出力を計算するステップと、
前記部分出力に基づいて出力対数を生成するステップとを含む、請求項４０に記載の方法。
【請求項４３】
前記出力対数を決定すべく２回以上の反復を実行するステップをさらに含み、各々の反復が前記部分出力の１個を生成する、請求項４２に記載の方法。
【請求項４４】
前記出力対数を生成するステップが、前記出力対数を生成すべく多段パイプラインを実行するステップを含み、前記多段パイプラインの各段が前記部分出力の１個を生成する、請求項４３に記載の方法。
【請求項４５】
前記複素数入力オペランドの絶対値部分に基づいて、複素数入力の絶対値部分を生成するステップと、
前記複素数入力オペランドの位相部分に基づいて、前記複素数入力の位相部分を生成するステップとをさらに含む、請求項４０に記載の方法。
【請求項４６】
前記位相部分が前記複素数入力の最上位部分を含み、前記絶対値部分が前記複素数入力の最下位部分を含む、請求項４５に記載のＡＬＵ。
【請求項４７】
前記参照表が絶対値参照表および位相参照表を含む、請求項４６に記載のＡＬＵ。
【請求項４８】
前記複素数入力の最上位部分を用いて前記位相参照表をアドレス指定し、前記複素数入力の最下位部分を用いて前記絶対値参照表をアドレス指定するステップを含む、請求項４７に記載のＡＬＵ。
【発明の詳細な説明】
【技術分野】
【０００１】
発明の背景
本発明は、一般にコンピュータ処理およびデジタル信号処理に関し、より具体的には算術論理ユニット（ＡＬＵ）のパイプライン化された対数演算に関する。
【背景技術】
【０００２】
ＡＬＵは従来より、加算、減算、乗算、除算等、実数および／または複素数に対する各種の計算機能を実行するために用いられてきた。従来のシステムは、固定小数点ＡＬＵまたは浮動小数点ＡＬＵのいずれかを用いる。精度が制限された実数対数を用いるＡＬＵもまた知られている。例えば、「対数演算を用いるデジタルフィルタリング」（Ｎ．Ｇ．キングズベリー（Ｋｉｎｇｓｂｕｒｙ）およびＰ．Ｊ．Ｗ．レイナー（Ｒａｙｎｅｒ）、電子通信学会論文集（１９７１年１月２８日）Ｖｏｌ．７、Ｎｏ．２、ｐｐ．５６〜５８）を参照されたい。「欧州対数マイクロプロセッサによる演算」（Ｊ．Ｎ．コールマン（Ｃｏｌｅｍａｎ）、Ｅ．Ｉ．チェスター（Ｃｈｅｓｔｅｒ）、Ｃ．Ｉ．ソフトリー（Ｓｏｆｔｌｅｙ）およびＪ．カドレック（Ｋａｄｌｅｃ）（２０００年７月）ＩＥＥＥ  Ｔｒａｎｓ  Ｃｏｍｐｕｔ．、Ｖｏｌ．４９、Ｎｏ．７、ｐｐ．７０２〜７１５）に実数用の高精度（３２ビット）対数演算ユニットの別の例が示されている。
【０００３】
固定小数点プログラミングは、特に乗算または除算演算の後で、小数点の位置を暗算で追い続ける負担をプログラマに課す。例えば、ＦＩＲフィルタが、１０００分１の精度で指定せねばならない重み係数−０．６０７、１．０３５、−０．６０７を用いて信号サンプルの重み付き加算を含むと仮定する。固定小数点演算において、例えば１．０３５を１０３５で表わす必要がある。その結果、信号サンプルに当該数を掛ける乗算は、結果のワード長を１０ビット拡大する。結果を同じメモリワード長に格納するために、１０ビットを捨てる必要がある、しかし、捨てられるのがＭＳＢ（最上位ビット（most significant bits））または、ＬＳＢ（最下位ビット（least significant bits））、あるいは各々の一部であるか否かは信号データ・スペクトルに依存し、従って現実的なデータを用いたシミュレーションにより判定しなければならない。このことは、正確なプログラミングの検証を煩雑にする。
【０００４】
浮動小数点プロセッサは、各々の格納された数の「仮数」部分に関連付けられた「指数」部分を用いて、自動的に小数点位置を追い続けることにより、小数点位置を暗算で監視する不便を回避すべく導入された。ＩＥＥＥ標準浮動小数点形式は、
ＳＥＥＥＥＥＥＥＥ．ＭＭＭＭＭＭＭＭＭＭＭＭＭＭＭＭＭＭＭＭＭＭＭ
である。ここでＳは、値の符号（０＝＋;１＝−）、ＥＥＥＥＥＥＥＥは８ビットの指数であり、ＭＭＭ．．．ＭＭは２３ビットの仮数である。ＩＥＥＥ標準浮動小数点形式により、仮数の第２４番目の上位ビットは常に１（真のゼロを除く）であり、従って省略される。ＩＥＥＥ形式では、仮数の実際の値は以下となる。
１．ＭＭＭＭＭＭＭＭＭＭＭＭＭＭＭＭＭＭＭＭＭＭＭ
例えば、底が２の対数−１．４０６２５×１０−２＝−１．８×２−７は、ＩＥＥＥ標準形式により以下のように表わすことができる。
１  ０１１１１０００．１１００１１００１１００１１００１１００１１０
さらに、ゼロ指数は０１１１１１１１であり、従って数＋１．０は以下のように書くことができる。
０  ０１１１１１１１．０００００００００００００００００００００００
真のゼロを表わすには負に無限の指数を必要とするが、現実的でないため、２−１２７の代わりに真のゼロとして全桁が０のビット・パターンを解釈することにより擬似的なゼロが作られた。
【０００５】
浮動小数点で表された２個の数の乗算には、固定小数点２４×２４ビット乗算器を用いて、サプレスされたＭＳＢの１が置換された仮数を掛け合わせるが、これは、指数部の加算および１２７のオフセットの１個の減算を行ない、複雑度が高い割には遅いロジックである。４８ビットを占める乗算の結果は次いで、２４ビットに切り捨てて、左寄せの後で最上位１ビットを削除しなければならない。乗算はこのように、固定小数点よりも浮動小数点で表された数の方がより複雑である。
【０００６】
浮動小数点で表された２個の数を加算するには、最初にそれらの指数を減算して、その小数点位置が揃っているか否かを確かめる必要がある。小数点位置が揃っていない場合、仮数を加算する前に、小さい方の数を選んで、暗黙の１を置換しながら、指数の差に等しい２進位置分だけ右へシフトして小数点位置を揃える。シフトを速く実行するために、固定小数点乗算器と構造および複雑度が似ているバレルシフタを用いる場合がある。加算、およびより詳しくは減算の後で、指数を増分させながら先頭のゼロを仮数から左へシフトアウトしなければならない。このように、加算および減算もまた、浮動小数点演算における複雑な操作である。
【０００７】
純粋な線型形式では、固定小数点で表された数の加算と減算は簡単である一方、乗算、除算、平方、および平方根計算はより複雑である。乗算器は、本質的に多数の論理遅延を有する一連の「シフトおよび条件付加算」回路として構成されている。この遅延を克服すべく、高速プロセッサはパイプライン化を用いる場合があるが、これは通常、プログラミングを複雑にする。従って、高速プロセッサのパイプライン化遅延を最小限に抑えることが関心事である。
【０００８】
浮動小数点で表された数表現が対数表現と線型表現が混合したものである点に留意されたい。指数は、当該数の底が２の対数の整数部であり、一方、仮数は線型の小数部である。線型表現では乗算が複雑で、対数表現では加算が複雑であるため、上記は混合浮動小数点表現の場合に両方が複雑である理由を説明するものである。これを克服すべく、上述のような、いくつかの公知のシステムでは純粋の対数表現を用いている。これにより小数点位置の情報を追い続ける課題が解決されて乗算は簡単になり、加算だけが複雑なまま残る。対数加算は、従来技術において参照表を用いて実行された。しかし、表のサイズに対する制約により、この解決策は限られたワード長、例えば０〜２４ビットの範囲に限定される。上述のコールマンの参照文献において、３２ビット精度が、合理的なサイズの参照表により、乗算器を必要とする補間技術を用いて実現された。このように、コールマンの処理には、依然として乗算に付随する複雑さが伴なう。
【発明の開示】
【発明が解決しようとする課題】
【０００９】
従来技術は実数対数演算を実行する各種の方法および装置について記述しているが、従来技術は無線信号処理に有用な複素数演算に対して参照表による解を提供しない。さらに、従来技術は、実数および複素数の共有処理機能を有するＡＬＵを提供しない。無線信号処理がしばしば、複素数および実数の処理機能を必要とするため、実数および複素数の両方の対数演算を実行する単一のＡＬＵは、サイズおよび／または電力が問題となる無線通信装置において利点がある。
【課題を解決するための手段】
【００１０】
発明の概要
本発明は、対数形式で表された実数および／または複素数を用いる算術演算を実行する算術論理ユニット（ＡＬＵ）に関する。対数表現を用いることにより、乗算と除算操作は簡素化されるが、加算と減算はより難しくなる。しかし、本明細書で述べる公知のアルゴリズムを用いて２個の入力オペランドの加算と減算の対数を簡素化することができる。以下の説明において、ａ＞ｂ且つｃ＝ａ＋ｂと仮定する。次式が示される。
Ｃ＝ｌｏｇｑ（ｃ）＝ｌｏｇｑ（ａ＋ｂ）＝Ａ＋ｌｏｇｑ（１＋ｑ−ｒ）    （１）
ここでｑは対数の底、ｒ＝Ａ−Ｂ、Ａ＝ｌｏｇｑ（ａ）、Ｂ＝ｌｏｇｑ（ｂ）である。式（１）で表わされる演算（以下、対数加算と称す）は、ａとｂの和の対数を加算と減算操作だけを用いて計算できるようにし、ｌｏｇｑ（１＋ｑ−ｒ）の値は参照表を用いて決定される。
【００１１】
一つの例示的な実施形態において、本発明は、対数極形式で表された複素数入力オペランドに対する対数演算の実行を可能にするＡＬＵを提供する。例えば、Ａ＝ｌｏｇｑ（ａ）＝（Ｒ１、θ１）且つＢ＝ｌｏｇｑ（ｂ）＝（Ｒ２、θ２）であり、ここでＲおよびθは以下に述べるように、各々対数絶対値（logmagnitude）および位相角を表わす。本実施形態によれば、ＡＬＵはメモリおよびプロセッサを含んでいる。メモリは、複素数の対数を対数極形式で決定するために用いる参照表を格納する。一方、プロセッサは、格納された参照表を用いて対数極形式で表された複素数入力オペランドの出力対数（output logarithm）を生成する。
【００１２】
別の例示的な実施形態において、本発明は、対数形式で表された実数および複素数に対する対数演算を実行するためのＡＬＵを提供する。本実施形態による例示的なＡＬＵはまた、メモリおよびプロセッサを含んでいる。メモリは、２個の参照表を格納し、１個が実数の対数値を決定し、他の１個は複素数の対数値を決定する。プロセッサは、実数入力オペランドには実数の参照表を、および複素数入力オペランドには複素数の参照表を用いて、対数形式で表された入力オペランドに基づいて出力対数を生成する共有プロセッサを含んでいる。
【００１３】
いずれにせよ、本発明の一つの例示的な実施形態によれば、プロセッサは対数加算および対数減算演算の両方に対する出力対数を同時に生成すべく構成されたバタフライ回路を含んでいてよい。別の例示的な実施形態によれば、プロセッサは参照コントローラおよび出力アキュムレータを含んでいてよい。ここで、参照コントローラは参照表（群）に基づいて１個以上の部分出力を計算する。部分出力は、１回以上の反復の間に、あるいは１段階以上のパイプライン実行の間に決定することができる。出力アキュムレータは、部分出力に基づいて出力対数を生成する。
【発明を実施するための最良の形態】
【００１４】
発明の詳細な説明
本発明は、対数形式で表された複素数および／または実数に対して対数演算を実行するＡＬＵを提供する。一実施形態において、ＡＬＵは、１個以上の参照表を用いて対数極形式で表された複素数の対数演算を実行する。別の実施形態において、ＡＬＵは、少なくとも１個の複素および１個の実数参照表を各々用いて、対数形式で表された複素数および実数に対数演算を実行する。本発明の詳細および利点をよりよく理解するために、始めに、数の表現、従来の補間法、反復的対数演算、高精度の反復的対数加算、高精度の反復的対数減算、および指数近似に関する詳細事項を以下に提供する。
【００１５】
数値の表現
ＡＬＵ内で実施される対数演算は一般に、固有の数形式を必要とする。上記のように、従来のプロセッサは、実数または複素数を、固定小数点バイナリ形式または浮動小数点形式にフォーマットすることができる。上記のように、固定小数点形式は純粋に線型形式である。従って、固定小数点で表された数を用いる加算と減算は単純であり、一方、乗算はより複雑である。浮動小数点で表された数は、対数と線型表現の混合型である。従って、加算、減算、乗算、および除算は、浮動小数点形式では全て複雑である。これらの形式に付随するいくつかの問題を克服すべく、純粋な対数形式を適切なアルゴリズムと共に用いて、対数形式に付随する加算と減算の問題を解決することができる。以下に、本発明に当てはまる範囲で、純粋対数形式に付随する更なる詳細事項について述べる。
【００１６】
純粋対数形式の実数は、（Ｓ８．２３）と略記され、以下のように表わすことができる。
Ｓ  ｘｘｘｘｘｘｘｘ．ｘｘｘｘｘｘｘｘｘｘｘｘｘｘｘｘｘｘｘｘｘｘｘ
【００１７】
２個のこのような実数を、複素数を表わす一つの方法として用いることができる。しかし、以下に詳述するように、対数極形式の方が複素数を表わすのにより有利である。
【００１８】
対数に用いる底に選択の余地がある。しかし、ある底を他のものに優先して選択する利点がある。例えば、底を２として選択することに多くの利点がある。第一に、式（２）に示すように、３２ビットの純粋対数形式は、（Ｓ８．２３）ＩＥＥＥ浮動小数点表現と実質的に同一に見える。
純粋対数：Ｓ  ｘｘ．．．ｘｘ．ｘｘ  ．．．ｘｘ⇔（−１）Ｓ×２−ｘｘ．．．ｘｘ．ｘｘ．．．ｘｘ
ＩＥＥＥ：Ｓ  ＥＥ．．．ＥＥ．ＭＭ．．．ＭＭ⇔（−１）Ｓ×（１＋０．ＭＭ．．．ＭＭ）×２−ＥＥ．．．ＥＥ    （２）
【００１９】
底２に対する対数の整数部は、ＩＥＥＥ形式に従い１２７によりオフセットされて、数１．０はいずれの形式でも次のように表現できる。
０  ０１１１１１１１．０００００００００００００００００００００００
あるいは、１２８のオフセットを用いてもよく、この場合、１．０は次のように表される。
０  １０００００００．０００００００００００００００００００００００
１２７または１２８のどちらを好適なオフセットとして用いるかは、実装上の問題である。
【００２０】
全ゼロパターンとは、ＩＥＥＥ浮動小数点形式に従い、擬似的な真ゼロとして定義できる。実際、同じ指数オフセット（１２７）を用いた場合、そのような純粋対数形式は、例えば４、２、１、０．５等、２のベキ乗である全ての数のＩＥＥＥ形式と一致し、各々の仮数部は図１に示すように、２のベキ乗の間で僅かに異なるだけである。
【００２１】
純粋対数形式では、表現可能な最大数は以下の通りである。
０  １１１１１１１１．１１１１１１１１１１１１１１１１１１１１１１１
これは底が２の場合、ほぼ２５６から１２７のオフセットを差し引いた対数、すなわち約２１２９または６．８１×１０３８を表わす。
【００２２】
表現可能な最小数は以下の通りである。
０  ００００００００．０００００００００００００００００００００００
これは底が２の場合、−１２７に等しい対数、すなわち５．８８×１０−３９を表わす。必要ならば、全ゼロ形式は、ＩＥＥＥの場合と同様に、擬似的な真ゼロを表わすために予約することができる。このシナリオにおいて、表現可能な最小な数は以下の通りである。
０  ００００００００．００００００００００００００００００００００１
これは底が２の場合、ほぼ−１２７に等しい対数、すなわち約５．８８×１０−３９に対応する。
【００２３】
１と２の間に値を有するＩＥＥＥ仮数の量子化精度は、２−２３のＬＳＢ値であり、精度は２−２３と２−２４（０．６〜１．２×１０−７）の間にある。数ｘを底が２の対数形式で表す際の精度は、対数における定数２−２３であり、ｄｘ／ｘ＝ｌｏｇｅ（２）×２−２３または０．８３×１０−７を与え、これはＩＥＥＥ量子化精度の平均より僅かに良い。
【００２４】
別の実装方式では、底ｅ等、他の底での対数を用いる場合がある。底がｅの場合、実数を以下で表わされる３２ビット符号付き対数絶対値形式で格納することができる。
Ｓ  ｘｘｘｘｘｘｘ．ｘｘｘｘｘｘｘｘｘｘｘｘｘｘｘｘｘｘｘｘｘｘｘｘ
または簡便に（Ｓ７．２４）で表わす。底が大きい（ｅ＝２．７１８）ため、小数点の左側のビットの個数が少なくてもダイナミックレンジを与えるのに十分である。一方、以下に詳述するように、同じまたはより良い精度を得るには小数点の右側に追加的なビットを必要とする。
【００２５】
対数絶対値部分は、符号付きの固定小数点値であって、最左端のビットが符号ビットであり、表された数の符号Ｓと混同しないこと。あるいは、対数絶対値部分は＋６４（または＋６３）分オフセットされ、それによりビット・パターン
０  １００００００．００００００００００００００００００００００００
はゼロ対数（数値＝１．０）を表わす。後者の場合、表現可能な最大数は、以下の底ｅの対数を有する。
０  １１１１１１１．１１１１１１１１１１１１１１１１１１１１１１１１
これは、ほぼ１２８であり、６４のオフセットを引いて、すなわちｅ６４または６．２４×１０２７であり、その逆数は表現可能な最小数を表わす。式（３）は、底ｅの対数表現の量子化精度を表わす。
【数１】
2008502037.tif 000003
【００２６】
図２は、ＩＥＥＥ浮動小数点形式（オフセットが＋１２７）を、底がｅの形式（オフセットが＋６４）および底が２の形式（オフセットが＋１２７）と比較する。
【００２７】
底を選択することは、実際には固定ワード長内のダイナミックレンジと精度の間のトレードオフを決定することに等しく、１整数ビット（one whole bit）に満たないステップで小数点を移動させることに等しい。
【数２】
2008502037.tif 000004
の底を選択すること（一般的には
【数３】
2008502037.tif 000005
但しＮは正または負の整数）は、同一性能をもたらしつつ小数点をプラスまたはマイナスＮビット分移動させることに等しい。しかし、８の底を選択することは、対数を３で除算するため、小数点を整数個分移動させることには等しくない。換言すれば、対数の底の選択は、数学的に２進小数点の右側と左側の間のビットの分割を変更することに等しく、精度とダイナミックレンジの間の妥協点が変わる。しかし、小数点はステップ単位でしか移動されず、一方、底は連続的に変更され得る。符号付き対数絶対値の場合（符号無し、１２７オフセットの対数絶対値とは対照的に）、符号ビットは、これを対数絶対値の符号として参照することにより、数値（Ｓビット）の符号とは区別される。これをさらに明らかにするために、底が１０の対数ｌｏｇ１０（３）＝０．４７７１、あるいはｌｏｇ１０（１／３）＝−０．４７７１を考慮する。このように、＋３の値を対数で示すには、数値とその対数の符号は共に＋であり、＋＋０．４７７１と書くことができる。下表にこの表記法を示す。
【００２８】
【表１】
2008502037.tif 000006
【００２９】
全ての対数表現が必ず正であるようにすべく、オフセット表現を用いる場合がある。例えば、数値を、ある選択された数、例えば０．０００１の何倍大きいかを示す対数で表現する場合、３の表現はｌｏｇ１０（３／０．０００１）＝４．４７７１に、また１／３の表現はｌｏｇ１０（０．３３３３／０．０００１）＝３．５２２９となる。オフセットにより、両方とも正になっている。０．０００１の表現は、ｌｏｇ（０．０００１／０．０００１）＝０となる。従って、全ゼロ・ビット・パターンは、可能な最小数０．０００１を表わす。
【００３０】
従来の対数表では、真数を参照するために０．００００と０．９９９９の間の対数用に１０，０００個の数を格納する必要があり、同じ精度まで対数を得るために同様の個数が必要である。参照表のサイズを減らすために対数的同一性（logarithmic identities）を用いる場合がある。例えば、ｌｏｇ１０（３）＝０．４７７１、およびｌｏｇ１０（２）＝０．３０１０である。これから、演繹すれば直ちに次式が得られる。
ｌｏｇ１０（６）＝ｌｏｇ１０（２×３）＝ｌｏｇ１０（３）＋ｌｏｇ１０（２）＝０．４７７１＋０．３０１０＝０．７７８１
これを演繹すれば直ちに以下も得られる。
ｌｏｇ１０（１．５）＝ｌｏｇ１０（３／２）＝ｌｏｇ１０（３）−ｌｏｇ１０（２）＝０．４７７１−０．３０１０＝０．１７６１
しかし、与えられた数値０．４７７１および０．３０１０をどのように単純に演算しても直ちに以下を演繹することはできない。
ｌｏｇ１０（５）＝ｌｏｇ１０（２＋３）＝０．６９９０
さらに、３と２の対数からどのように以下を推論できるかも明らかではない。
ｌｏｇ１０（１）＝ｌｏｇ１０（３−２）＝０
【００３１】
この問題に対処すべく、対数加算関数Ｆａに基づく参照表を用いる場合がある。例えば、（２＋３）の対数は、底が１０の場合、ｌｏｇ１０（３）とｌｏｇ１０（２）のうち大きい方、すなわち０．４７７１を、それらの差の関数Ｆａ[ｌｏｇ１０（３）−ｌｏｇ１０（２）]＝Ｆａ（０．１７６１）に加算することで得られる。
Ｆａ（ｘ）＝ｌｏｇ１０（１＋１０−ｘ）    （４）
同様に、３−２の対数は、ｌｏｇ１０（３）とｌｏｇ１０（２）のうち大きい方から関数Ｆｓ（０．１７６１）を減算して得られる。ここで、底が１０の場合のＦｓ（ｘ）は以下の通りである。
Ｆｓ（ｘ）＝ｌｏｇ１０（１−１０−ｘ）    （５）
しかし、Ｆａ（ｘ）およびＦｓ（ｘ）用の参照表は依然として、各々の関数用に少なくとも１０，０００個の数値を格納する必要がある。
【００３２】
補間法
補間を用いて、参照表に格納する値の数を減らすことができる。後の考察を容易にすべく、以下で補間をさらに詳しく調べる。説明を簡便にすべく、底ｅを用いる。しかし、他の底も同様に適用できる点を理解されたい。
【００３３】
例えばｘｏの有限個の表の値を用いて、すなわち表の点ｘｏの回りの関数Ｆ（ｘ）のテイラー／マクローリン展開を用いて、関数Ｆａ（ｘ）＝ｌｏｇｅ（１＋ｅ−ｘ）を計算すれば次式が得られる。
Ｆ（ｘ）＝Ｆ（ｘｏ）＋（ｘ−ｘｏ）Ｆ'（ｘｏ）＋０．５（ｘ−ｘｏ）２Ｆ”（ｘｏ）．．．，    （６）
ここで、’は１次導関数を表わし、”は２次導関数を表わす。この展開に基づいて、ｌｏｇｅ（ｃ）＝ｌｏｇｅ（ａ＋ｂ）をテイラー／マクローリン展開の利点を用いてｌｏｇｅ（ａ）＋Ｆａ（ｘ）として計算することができる。ここで、ｘ＝ｌｏｇｅ（ａ）−ｌｏｇｅ（ｂ）であり、ｘｏの値は表で提供される。
【００３４】
３２ビットの底がｅの場合に簡単な線型補間を用いるには、２次導関数Ｆ”を含む２次項が、２４番目の２進位置、例えば２−２５未満まで無視できなければならない。Ｆａ（ｘ）＝ｌｏｇｅ（１＋ｅ−ｘ）を微分して次式が得られる。
【数４】
2008502037.tif 000007
Ｆａ”（ｘ）は、ｘ＝０のとき最大値０．２５をとる。従って、２次項は、（ｘ−ｘｏ）＜２−１１のとき２−２５未満である。この必要条件を満たすには、最上位ビットは、形式（５．１１）で表の点ｘｏをアドレス指定する。すなわち、
ｘｘｘｘｘ．ｘｘｘｘｘｘｘｘｘｘｘ
である。これは、剰余ｄｘ＝ｘ−ｘｏが以下の形式であって、
０．０００００００００００ｘｘｘｘｘｘｘｘｘｘｘｘｘ、
従って２−１１未満であるようにするためである。このように、ｄｘは１３ビットの数値であり、ｘｏは１６ビットの数値である。
【００３５】
線型補間項Ｆａ'（ｘｏ）の精度もまた、２−２５のオーダーでなければならない。Ｆａ'（ｘｏ）には２−１１未満であるｄｘが乗算されるため、Ｆａ'（ｘｏ）の精度は２−１４でなければならない。Ｆａ（ｘｏ）が丸め誤差の減少に寄与すべく表に１対の追加的なＬＳＢを提供してもよいが、この場合、各々のｘｏ値についてＦとＦ’を格納するために幅が５バイト（４０ビット）の参照表が必要となる。
【００３６】
従って、表の値は、２６ビットのＦａの２１６＝６５，５３６個の値、および同じ個数の対応する１４ビットＦａ’値を含んでいる。また、ｄｘ・Ｆａ’の形成に１４×１３ビット乗算器が必要である。このような乗算器は、本質的に、１３個のシフトおよび加算演算を実行し、従って約１３個の論理遅延を含んでいる。乗算器の複雑さと遅延はブースのアルゴリズム（Booth's algorithm）を用いて若干減少することができるが、ベンチマークとして従来の乗算器を用いてもよい。
【００３７】
図３に、上述の線型補間を実装する従来型ＡＬＵの例示的なブロック図を示す。図３のＡＬＵは、減算器１０、加算器２０、Ｆａ／Ｆａ'参照表３０、乗算器４０、および減算器５０を用いて、値Ｃ＝ｌｏｇｅ（Ａ＋Ｂ）を推定する。本例で用いるように、Ａ＝ｌｏｇｅ（ａ）且つＢ＝ｌｏｇｅ（ｂ）である。後述するように、特異点を避けるべく減算用に後方補間を行なう必要があるため、図３にＸＭ、すなわちｘの最上位１６ビット部分より１ビット大きいｘｏの値、からの補間を示す。従って、Ｆａ用の参照表３０はＸＭ＋１におけるＦａの値を含み、含まれるＦａ’用の値は当該区間の中央値、すなわちＸＭ＋０．５で計算されたＦａ’の値である。乗算器４０は、１４ビットのＦａ'（ＸＭ）の値に、ｘの最下位１３ビットの、１３ビットで表わされる２の補数である（by the 13 bit two's complement of the least significant 13 bits of x）
【数５】
2008502037.tif 000008
を乗ずる。さらに、乗算器４０は、結果がＦａ'（ＸＭ）と
【数６】
2008502037.tif 000009
の２７ビットで表わされる積であるように構成されている。
【００３８】
２７ビットで表わされる積のＬＳＢは、減算器５０への桁下げとして入力されて、残り２６ビットが、２６ビットＦａ'（ＸＭ）値から減算されて２６ビットへの補間値を生成し、その値は次いで出力加算器２０内でＡとＢのうち大きい方に加算され、「１」の桁上げビットによりその結果Ｃを対数絶対値の３１ビットに切上げることができる。
【００３９】
従って、線型補間に基づく実用的な３２ビット対数加算器は、約６５，５３６×４０＝２．６２Ｍビットの参照表３０、および１３×１４ビットの乗算器４０を含んでいる。これらの構成要素は、かなり大きいシリコン面積を占有して、論理遅延に関して速度面での効果が無い。しかし、補間方法を用いて減算または複素数算術演算に対処すべく、ワード長および乗算器構成を大幅に調整する必要がある。
【００４０】
例えば、補間を用いて減算を実行するために、以下に与えられる減算関数方程式により関数値が決定される。
Ｆｓ（ｘ）＝ｌｏｇｅ（１−ｅ−ｘ）    （８）
Ｆｓ（ｘ）のテイラー／マクローリン展開は、以下の１次導関数を含んでいる。
【数７】
2008502037.tif 000010
これはｘが０に近づくにつれ無限大に発散する。この特異点からの演算を遠ざけるべく、次式を用いて、ｘ＝ｌｏｇｅ（Ａ）−ｌｏｇｅ（Ｂ）（Ａ＞Ｂの場合）の実際の値よりＬＳＢ１個分大きい表の値から後方に関数を補間する場合がある。
Ｆｓ（ｘ）＝Ｆｓ（ｘｏ）−（ｘｏ−ｘ）Ｆｓ’（ｘｏ）    （１０）
これは、図３の対数加算について示した実装方式である。従って、少なくともｘの最上位ビットがゼロである場合、特異点を回避するためにのみ、ｘｏは値においてＬＳＢ１個分大きい。
【００４１】
加算の場合と同じ１６／１３ビット分割により、ｘｏの最小値は２−１１であって、Ｆｓ’のサイズは約２，０４８個の値である。しかし、Ｆｓの値は自身の対数加算の相手より１２ビット長いため、ｄｘ・Ｆｓを形成する乗算器のサイズを１３×２６ビットの装置へ増大させる。
【００４２】
上記に鑑みて、実数の加算と実数の減算とのシナジーは、複素数演算の場合と同様に、ＡＬＵに実装される補間に制限される。従って、補間を実行する参照表および乗算の両方に対するニーズのため、従来の補間方法は、ハードウェアロジックでは実装不可能なほど徒に複雑化してしまう。
【００４３】
反復的対数演算
上述の補間処理に代わるものとして、また記憶要件を減らすために、反復的解法を用いる場合がある。反復的解法は２個の比較的小さい参照表を用いて、表にされた関数に基づき反復的な処理を用いて対数出力を計算する。反復的解法を示すために、１０進数の例として、ｌｏｇ１０（３）＝０．４７７１およびｌｏｇ１０（２）＝０．３０１０からｌｏｇ１０（５）＝ｌｏｇ１０（３＋２）およびｌｏｇ１０（１）＝ｌｏｇ１０（３−２）を推論する仕方について説明する。
【００４４】
対数加算関数表（以下でＦａ表とも呼ぶ）は、底が１０の場合に、０．０と４．９の間におけるｘの値を０．１刻みで、式（４）に基づいて５０個の値を格納している。他の表（以下で補正表またはＧ表と呼ぶ）は、次式に基づいて、０．００１と０．０９９の間におけるｙの値を０．００１刻みで９９個の値を格納する。
Ｇ（ｙ）＝−ｌｏｇ１０（１−１０−ｙ）    （１１）
【００４５】
以下に、これら２個の参照表を用いて上述のｌｏｇ（５）＝ｌｏｇ（３＋２）の例に対する２表反復処理を示す。以下は底が１０の場合について記述しているが、当業者であれば任意の底を用いてもよいことが理解されよう。底１０とは異なる底を用いる実施形態のために、式（４）および（１１）が各々底１０での計算用の関数および補正表を定義する一方、式（１２）が一般に、任意の底ｑについて関数および補正表を定義することが理解されよう。
Ｆａ（ｘ）＝ｌｏｇｑ（１＋ｑ−ｘ）
Ｇ（ｙ）＝−ｌｏｇｑ（１−ｑ−ｙ）    （１２）
【００４６】
対数加算処理の場合、引数ｘ＝Ａ−Ｂ＝ｌｏｇ１０（３）−ｌｏｇ１０−（２）＝０．１７６１は最初に、最も近い小数点以下１桁（the nearest tenth）すなわち０．２に丸められる。５０個の値を含むＦａ表から、Ｆａ（０．２）＝０．２１２４であることがわかる。０．２１２４を０．４７７１に加算した結果、ｌｏｇ１０（２＋３）の第１近似として０．６８９５が得られる。ｘを０．１７６１から０．２に丸めることで生じる誤差分値は、０．０２３９である。この誤差は決して０．０９９を超えないため、９９値の補正参照表Ｇ（ｙ）を用いる。補正値ｙ＝０．０２３９が０．０２４へ切上げられてＧ表は補正値１．２６９５を与える。Ｇ（ｙ）＝１．２６９５、第１参照表からの値Ｆａ（０．２）＝（０．２１２４）、および当初の値ｘ（０．１７６１）を組み合わせてＦａのための新たな引数、ｘ'＝１．６５８が生成される。当業者であれば、この場合ｘを修飾する符号（’）は微分を表わしていない点を理解されよう。
【００４７】
最も近い小数点以下１桁に切上げられた場合、ｘ'＝１．７である。Ｆａ（１．７）＝０．００８６であり、これをｌｏｇ１０（２＋３）の第１近似値０．６８９５に加算すれば、第２近似値（０．６９８１）が得られる。１．６５８を１．７に切上げたことによる誤差は、０．０４２である。ｙ＝０．０４２をＧ表で調べると、値１．０３５が得られ、これを前のＦａ値０．００８６に加算し、且つｘ'＝１．６５８であることから、新しいｘ値すなわちｘ”＝２．７０１６が得られる。ｘ”を２．８に切上げた後でＦａ表を用いれば、Ｆａ（２．８）＝０．０００７が得られる。第２近似値（０．６９８１）に０．０００７を加算することにより、第３且つ最終の近似値０．６９８８が得られ、これは５０個の値しか含まないＦａ参照表、および１００個の値しか含まないＧ参照表を使用した場合に期待できる精度で、実際の値０．６９９０に十分近いと見なされる。必要ならば、更なる反復を行なって、若干精度を上げることができる。しかし、加算の場合、一般に３回を超える反復は必要ない。あるいは、最大反復回数が予め３に設定されている場合、最後の反復のＦａの引数を常に２．７の最も近い小数点以下１桁へ切上げるのではなく、切捨ててもよい。Ｆａ（２．７）＝０．０００９であり、これをｌｏｇ１０（３＋２）の第２近似値０．６９８１に加算すれば、予想結果ｌｏｇ１０（５）＝ｌｏｇ１０（３＋２）＝０．６９９０が得られる。
【００４８】
２表反復的処理は、乗算が回避され且つ参照表のサイズが百分の一に減少するのと引き換えに３段階の処理を受け入れることを含んでいる。ハードウェア実装において、３回の反復に必要な論理遅延の総数は実際には、乗算器の反復的な加算／シフト構造での論理遅延の数より少なくて済む。いずれにせよ、上述の参照表サイズの縮小は、シリコン面積および／または精度が主な重要事項である場合に有用である。
【００４９】
ｌｏｇ１０（３−２）の値も同様に計算することができる。開始時の近似値は、より大きい数、すなわち０．４７７１の対数である。減算用のＦｓ表は以下の値を０．１刻みで格納し、Ｇ表は不変のままである。
Ｆｓ（ｘ）＝ｌｏｇ１０（１−１０−ｘ）（底が１０の場合）
Ｆｓ（ｘ）＝ｌｏｇｑ（１−ｑ−ｘ）（一般的な底ｑの場合）    （１３）
０．１７６１のｌｏｇ１０（３）とｌｏｇ１０（２）の差は０．２の最も近い小数点以下１桁へ切上げられる。減算関数表で０．２を参照すればＦｓ（０．２）＝−０．４３２９が得られる。開始時近似値０．４７７１に−０．４３２９を加算すればｌｏｇ１０（１）に対する第１近似値０．０４４２が得られる。
【００５０】
０．１７６１を０．２に切上げたことによる誤差は、加算の場合、０．０２３９である。先に定義されたようにＧ表を０．０２４でアドレス指定すれば値１．２６９５が返される。先のＦｓ引数ｘ＝０．１７６１および先のＦｓ表参照値−０．４３２９に１．２６９５を加算することにより、新たなＦｓ表引数ｘ'＝１．０１２７が得られる。ｘ’を最も近い小数点以下１桁の１．１に切上げ、且つＦｓ表を用いることで再びＦｓ（１．１）＝−０．０３５９が得られる。第１近似値（０．０４４２）に−０．０３５９を加算することにより、ｌｏｇ１０（１）の第２近似値０．００８３が得られる。１．０１２７を１．１に切上げたことによる誤差は０．０８７３である。値０．０８７を用いてＧ表をアドレス指定すれば、Ｇ（０．０８７）＝０．７４１０が得られる。先の丸めていないＦｓ表引数１．０１２７およびＦｓ表参照値−０．０３５９に加算されたならば、新たなＦｓ表引数ｘ”＝１．７１７８が得られる。ｘ”を１．８に切上げた結果、Ｆｓ（１．８）＝−０．００６９が得られ、これを第２近似値０．００８３に加算して結果的にｌｏｇ１０（１）の第３近似値０．００１４が得られる。１．７１７８を１．８に切上げたことによる誤差は０．０８２２である。０．０８２でＧ表をアドレス指定すれば、値０．７６４３が返される。これを先のＦｓ表引数１．７１７８および先のＦｓ表参照値−０．００６９に加算することにより、新たなＦｓ表引数ｘ’’’＝２．４７５２が得られる。２．４７５２を２．５に切上げることにより、関数値Ｆｓ（２．５）＝−０．００１４が得られる。第３近似値（０．００１４）に−０．００１４を加算することにより、予想通りｌｏｇ１０（１）＝ｌｏｇ１０（３−２）＝０が得られる。各々の反復についてＦｓの引数が増大する結果、次第に補正が小さくなるため、本アルゴリズムは収束する。
【００５１】
減算の場合の上述の方法は、Ｆ表の減算バージョンを用いる点が異なるが、加算に関して同様である。しかし、加算と減算は同一のＧ表を用いる。さらに、減算で良い精度を得るには加算より１回多くの反復が必要である。この理由は、減算の場合、Ｆｓ値を加算した際の増分が負であるため、各反復におけるＦｓの引数の立ち上がり僅かに遅く、特に最初の反復でこれが顕著だからである。
【００５２】
高精度対数加算
一般に、より一般的な底がｑの対数について解決すべき対数加算問題は、以下のステップで与えることができる。
・Ａ＝ｌｏｇｑ（ａ）およびＢ＝ｌｏｇｑ（ｂ）と仮定する。ここで、ａおよびｂは正数、且つｑは底である。
・目的：Ｃ＝ｌｏｇｑ（ｃ）見つけること。ここで、ｃ＝ａ＋ｂである。
・従って、Ｃ＝ｌｏｇｑ（ａ＋ｂ）＝ｌｏｇｑ（ｑＡ＋ｑＢ）である。
・ＡをＡとＢのうち大きい方とする。
・この場合Ｃ＝ｌｏｇｑ（ｑＡ（１＋ｑ−（Ａ−Ｂ））
＝Ａ＋ｌｏｇｑ（１＋ｑ−（Ａ−Ｂ））
＝Ａ＋ｌｏｇｑ（１＋ｑ−ｒ）、ここでｒ＝Ａ−Ｂ、且つ正である。
従って、当該問題は１変数ｒの関数ｌｏｇｑ（１＋ｑ−ｒ）の計算に帰着された。
【００５３】
ｒのワード長に制限がある場合、関数値を関数参照表により取得してもよい。例えば、１６ビットのｒ値の場合、関数参照表は６５，５３６個のワードを格納できる筈である。さらに、底がｑ＝ｅ＝２．７１８の場合にｒ＞９であるならば、関数の値は２−１３未満の差でゼロと異なり、このことは、１２ビットの小数部と共に、１５までの範囲のｒの４ビットの整数部だけを考慮すればよいことを示唆している。従って、ｒ＞９の場合、関数値は小数点以下２進１２桁までゼロであり、従って参照表は、９×４，０９６＝３６，８６４ワードのメモリを占める、最大９までのｒの値だけが必要とされる。
【００５４】
ｒ＝０の場合、関数の最大値がｌｏｇｅ（２）＝０．６９であるため、１２ビットの小数部だけを格納すればよく、必要なメモリは６５，５３６個の１６ビットワードではなく、３６，８６４個の１２ビットのワードだけで済む。底が２の場合、関数はｒ＞１３の場合に２進１２桁までゼロであるため、ここでもｒの４ビットの整数部だけを考慮すれば済む。符号に１ビットを用いる場合、対数絶対値部分の長さは、例えば４．１１形式または５．１０形式では、１５ビットに過ぎず、且つ上述の数値は適宜調整できる。
【００５５】
しかし、例えば３２ビットのワード長を用いて、１６ビットよりもはるかに高い精度を得るには、関数のための直接参照表（a direct look-up table for the function）が極端に大きくなる。例えば、ＩＥＥＥの３２ビット浮動小数点標準と同等の精度およびダイナミックレンジを与えるには、底がｅの場合にＡおよびＢは各々７ビットの整数部、２４ビットの小数部、および符号ビット１個を有していなければならない。関数が２４ビットの精度でゼロである前に、ｒの値が２５ｌｏｇｅ（２）＝１７．３２より大きくなければならず、これはｒの５ビットの正整数部により表現可能である。このように、５．２４形式で可能な２９ビットのｒ値を関数Ｆａの引数とみなさなればならない。０と１８の間のｒ値を直接参照するために、１８×２２４すなわち３億２００万個の２４ビットワードの参照表サイズが必要となる。実質的に、あらゆる対数演算の研究はこれらの表のサイズを減らすことを意図しており、６４ビットワード長を実用的にすることが究極の目的である。本明細書に述べるいくつかの技術は、この目的へ向けて技術を進歩させるものである。
【００５６】
ｒの全てのビットをアドレスとして用いる対数加算関数Ｆａを直接参照する必要により、参照表のサイズを単一の大きな表から減らすべく、本発明の一実施形態は、ｒを最上位（ＭＳ）および最下位（ＬＳ）部分、すなわちｒＭとｒＬに分割することを含んでいる。以下に述べるように、これらのＭＳおよびＬＳ部分は、はるかに小さい２個の表Ｆ、Ｇを参照する。ＭＳ部分は、入力値の「切上げられた」バージョンを表わし、一方ＬＳ部分は切上げられたバージョンと元の完全な引数値との差を表わす。
【００５７】
式（１４）に示すように、ｒＭをｒ＜３２の最上位１４ビット、ｒＬをｒの最下位１５のビットとする。
ｒＭ＝ｘｘｘｘｘ．ｘｘｘｘｘｘｘｘｘ
ｒＬ＝０００００．０００００００００ｘｘｘｘｘｘｘｘｘｘｘｘｘｘｘ  （１４）
簡便のため、ｒＭおよびｒＬの長さを略して（５．９）および（１５）と表記する場合がある。本方法に明らかな変更を加えることにより、ｒを最上位および最下位ビット部分に分割する他の仕方も等しく使用可能であり、以下に詳述する特定の分割を好適な対象とした考察では、異なるワード長（例：１６ビット）または複素数演算に対して同じＦおよびＧ表を再利用可能なことが関心事項である。
【００５８】
ｒＭ＋を、ｒＬの可能な最大値、すなわち０００００．０００００００００１１１１１１１１１１１１１１１により増分されたｒＭの値とする。これは、最下位１５ビットが１に設定された元のｒ値そのものである点を理解されたい。いくつかの実施形態において、代替的にｒＭを０．００００００００１だけ増分することができる。すなわち次式が得られる。
ｒＭ＋＝ｘｘｘｘｘ．ｘｘｘｘｘｘｘｘｘ＋０００００．００００００００１  （１５）
ｒＬの補数値を次式で表わすことができる。
ｒＬ−＝ｒＭ＋−ｒ    （１６）
これは、ｒＭに対する上述の２個の代替的な増分のどちらが使われるかに応じて、ｒＬの補数または２の補数のいずれかである。すなわち、ｒＬ−＝
０００００．０００００００００１１１１１１１１１１１１１１１−０００００．０００００００００ｘｘｘｘｘｘｘｘｘｘｘｘｘｘｘ（ｒＬの補数）またはｒＬ−＝０００００．００００００００１０００００００００００００００−０００００．０００００００００ｘｘｘｘｘｘｘｘｘｘｘｘｘｘｘ（ｒＬの２の補数）である。ここから、底ｅの場合に以下の結果が得られる。
【数８】
2008502037.tif 000011
ここで、
【数９】
2008502037.tif 000012
である。ｌｏｇ（１＋ｅ−ｒ）を同様に拡張すれば次式が得られる。
【数１０】
2008502037.tif 000013
ここで、
【数１１】
2008502037.tif 000014
である。結論に至るまで反復することにより、所望の解は以下の関数の和を含んでいることがわかる。
【数１２】
2008502037.tif 000015
など。これらは各々のｒ引数の最上位１４ビットだけに依存し、それらの引数は１６，３８４ワードしか含まない参照表から取得することができる。
【００５９】
式（１７）〜（１９）の文脈において、表記ｒ値の修飾に用いるプライム記号（群）は、導関数を表わすものではない。その代わりに、一連のｒ値、すなわちｒ、ｒ’、ｒ”等は、対数加算関数参照表（Ｆａ）から直近に得た値を先行する値に累算（accumulating）して、ｒの最下位１５ビットすなわち、ｒＬ−が１５ビット値であるため３２，７６８ワードを有する補正参照表すなわちＧ表により与えられる値
【数１３】
2008502037.tif 000016
に依存する値を加算することにより、導かれる。
【００６０】
格納された値はｒＭ＋およびｒＬ−から計算されているが、関数および補正参照表を各々ｒＭおよびｒＬにより直接アドレス参照することができる。これらの参照表を各々関数ＦａおよびＧと呼び、補正値が常に極めて大きな負値である点に注目して、正の補正値をＧ表に格納してもよい。負の値を格納してこれを減算するのではなく、この正の補正値を先のｒ引数に加算する。さらに、格納されている値からＧ表の最小補正値または少なくともその整数部を減算して、格納されているビット数を減らし、表から値が抽出されたところで足し戻してもよい。底が２の場合、最小補正値として値８が適しており、いくつか実施形態では足し戻す必要さえない。その場合反復処理は以下のとおりである。
１．出力アキュムレータ値ＣをＡとＢのうち大きい方に初期化する。
２．Ａの方が大きい場合はｒをＡ−Ｂに、またはＢの方が大きい場合はＢ−Ａに初期化する。
３．ｒをｒＭとｒＬに分割する。
４．各々ｒＭおよびｒＬによる指定に従いＦａ（ｒＭ＋）およびＧ（ｒＬ−）を参照する。
５．ＦａをＣに、およびＦａ＋Ｇをｒに累算する。
６．ｒ＜ＳＴＯＰ_ＴＨＲＥＳＨＯＬＤ（以下に詳述）の場合はステップ３から反復する。
【００６１】
当業者であれば、論理ｂ６．ＯＲ．（ｂ５．ＡＮＤ．（ｂ４．ＯＲ．ｂ３．ＯＲ．ｂ２））（第８、４または２ビットのうち１個が設定される、第３２ビットの設定または第１６ビットの設定）を用いて１８より大きいｒ値を検出するために数個の論理ゲートを用いてよいこと（ここで、ビット・インデックスは小数点の左側でのビット位置を示す）が理解されよう。関数
【数１４】
2008502037.tif 000017
の値は常に約６．２４より大きく、従って反復は常に３サイクル以下で終了する。底が２の場合、補正値は比例的に大きく、そのため底が２の場合にｒは常に高々３サイクルで２５を超える。一般に、任意の底に対して３サイクルで十分である。
【００６２】
高精度２表対数減算
ＡおよびＢに関連付けられた符号Ｓが、ａとｂは同じ符号を有することを示す場合、上述の対数加算アルゴリズム（「対数加算」と略す）を用いることができる。そうでない場合、対数減算アルゴリズム（「対数減算」と略す）が必要である。下表に各々のアルゴリズムが用いられる場合分けを示す。
【００６３】
【表２】
2008502037.tif 000018
対数加算アルゴリズムを用いた場合、結果の符号は常に大きい方の対数絶対値に関連付けられた符号である。
【００６４】
第２の引数に関連付けられた符号が最初に反転された場合、同じことが対数減算アルゴリズムでも成り立つ。減算を行うことが求められた場合、対数演算ユニットへの入力に第２の引数が適用されたならば、第２の引数の符号の反転が行なわれる。「対数減算」アルゴリズムは、以下のように導かれる。Ａ＝ｌｏｇ（｜ａ｜）且つＢ＝ｌｏｇ（｜ｂ｜）が与えられていると仮定する。Ｃ＝ｌｏｇ（ｃ）を見出すこと求められ、ここでｃ＝｜ａ｜−｜ｂ｜である。Ａは、ＡとＢのうち大きい方とする。わかりやすく絶対値記号（｜｜）を外し、ここでａとｂの両方が正と仮定すれば、次式が得られる。
Ｃ＝ｌｏｇｅ（ａ−ｂ）＝ｌｏｇｅ（ｅＡ−ｅＢ）    （２０）
対数加算と同様に、本例でも説明目的だけのために底としてｅを用いているが、これに限定されない。
【００６５】
ＡがＢより大きいと仮定しているため、次式が得られる。
Ｃ＝ｌｏｇｅ（ｅＡ（１−ｅ−（Ａ−Ｂ）））
＝Ａ＋ｌｏｇｅ（１−ｅ−（Ａ−Ｂ）））
＝Ａ＋ｌｏｇｅ（１−ｅ−ｒ）    （２１）
ここでｒ＝Ａ−Ｂは正である。従って、問題は１変数ｒの関数ｌｏｇ（１−ｅ−ｒ）の計算に帰着する。ｒＭ、ｒＬ、ｒＭ＋およびｒＬ−を以前定義された通りとする。すると、底ｅの場合、次式が得られる。
【数１５】
2008502037.tif 000019
ここで、
【数１６】
2008502037.tif 000020
である。ｌｏｇｅ（１−ｅ−ｒ）を拡張すれば次式が得られる。
【数１７】
2008502037.tif 000021
ここで、
【数１８】
2008502037.tif 000022
であり、以下同様である。結論に至るまで反復することにより、所望の解は以下の関数の和を含んでいることがわかる。
【数１９】
2008502037.tif 000023
など。これらは各々の全ワード長ｒ値の最上位１４ビットだけに依存し、１６，３８４のワードだけを含む参照表により与えられる。
【００６６】
対数加算と同様に、対数減算用の参照表は、格納された値がｒＭ＋とｒＬ−から計算されているものの、ｒＭとｒＬにより直接参照できるように構成することができる。さらに、対数加算と同様に、表記されたｒ値を修飾するために用いるプライム記号は導関数を表わすものではない。
【００６７】
これらの参照表ＦｓおよびＧ（Ｇは対数加算アルゴリズムの場合と同じ参照表である）を各々呼び出して、上述のようにＧの正値を格納することにより、対数減算処理用に必要なＦｓおよびＧ表が生成される。１−ｅ−ｒが常に１より小さいため、Ｆｓは常に負であり、従って正の大きさ（positive magnitude）を格納して加算ではなく減算することができる。別の方法は、負の符号ビットを外した負値を格納して、減算が実行中の場合は最上位「１」を付加することにより負のビット符号を参照表の外側で置換しておく。好適な選択は、以下で詳述するように、どちらの論理が単純で、加算と減算の間の参照表の値に最大のシナジーが得られるかによる。いずれにせよ、以下のステップが「対数減算」処理の概要を示す。
１．出力アキュムレータ値ＣをＡとＢのうち大きい方に初期化する。
２．Ａの方が大きい場合はｒをＡ−Ｂに、またはＢの方が大きい場合はＢ−Ａに初期化する。
３．ｒをｒＭとｒＬに分割する。
４．各々ｒＭおよびｒＬによる指定に従いＦｓ（ｒＭ＋）およびＧ（ｒＬ−）を参照する。
５．ＦｓをＣに、およびＦｓ＋Ｇをｒに累算する。
６．ｒ＜ＳＴＯＰ_ＴＨＲＥＳＨＯＬＤ（以下に詳述）の場合はステップ３から反復する。
【００６８】
対数加算および対数減算アルゴリズムの両方において、ＳＴＯＰ_ＴＨＲＥＳＨＯＬＤは、その後の反復からの寄与がＬＳＢの半分に満たないよう、選択される。これは、小数点以下２進２４桁を有する底ｅの場合は１７．３２（１８を用いてよい）で生じ、あるいは小数点以下２進２３桁を有する底２の場合は２４で生じる。原理的には、ＳＴＯＰ_ＴＨＲＥＳＨＯＬＤ３１を与える、底２より小さい底を見出す可能性があり、その場合、ｒの選択されたＭＳＢによりアドレス指定可能な全アドレス空間にわたり定義されるＦ関数を用いることになる。あるいは、ＳＴＯＰ_ＴＨＲＥＳＨＯＬＤを与え、同じ特性を有する、底ｅより大きい底を見出す場合がある。しかし、Ｆ表のために全アドレス空間を用いることで得られる利点よりも、底が２であることの実際的な利点の方が大きいと思われる。一般に、底が２の場合、ＳＴＯＰ_ＴＨＲＥＳＨＯＬＤは、対数表現の小数点以下の２進位置の個数より単に１、２個大きいだけである。
【００６９】
上に挙げた１０進数の例で示唆されるように、Ｆ表を参照するために用いた最後の引数、例えば
【数２０】
2008502037.tif 000024
を、
【数２１】
2008502037.tif 000025
から切上げるのではなく切捨てれば、有限回数の反復の後で精度が向上する。２表反復処理が常に一定回数の反復を実行するか、あるいは処理が最後の反復を識別するならば、Ｆの引数を最後の反復で切り捨てることができる。最後の反復は、ｒが例えばＳＴＯＰ_ＴＨＲＥＳＨＯＬＤのある範囲（底ｅの場合約６、底が２の場合約８）内にあって、次の反復がＳＴＯＰ_ＴＨＲＥＳＨＯＬＤを超える筈であることが示されることにより、識別できる。この方法を用いる場合、ｒＬの左端ビットが最後の反復でゼロになったならば、Ｆ表へのアドレスを１だけ減らすことができる。後述するパイプライン実装において、最終的なＦ表の内容は、切り捨てられた引数のために単純に計算される。
【００７０】
対数減算と対数加算アルゴリズムの唯一の違いは、参照表としてＦａではなくＦｓを用いる点である。両方ともサイズが１６，３８４ワードであるため、＋または−のバージョンを選択するための追加的アドレス・ビットを有する単一関数のＦ表に組み合わせることができ、これをＦ（ｒＭ，ｏｐｃｏｄｅ）と表記する。ここで、追加的な引数「演算コード（ｏｐｃｏｄｅ）」は、対数加算または対数減算アルゴリズムのどちらを適用するべきかを示す０または１の値を取る追加的なアドレス・ビットである。あるいは、周辺ロジック（すなわち入出力アキュムレータおよび加算器／減算器）は各々の参照表に比べて小さいため、周辺ロジックを複製して独立の加算器および減算器を形成するためにほとんどコストを要しない。以下に考察するさらに別の可能性として、関数Ｆａと−Ｆｓの類似性を利用することができる。
【００７１】
指数近似
上述のように、ｒＭ＋は、ｒＬの取り得る最大の値（０．０００００００００１１１１１１１１１１１１１１）だけ増やしたｒＭを含んでいても、あるいは０．００００００００１だけ増やしたｒＭを含んでいてよい。ｒＭの増分として０．００００００００１ではなく０．０００００００００１１１１１１１．．．．１を選択する利点は、ｒＭ＝０の場合に直接Ｆの値を得るために、反復的アルゴリズムを実行する間にｒＬの補数でＧ表をアドレス指定しても、あるいはｒＬ（補数を取られていない）により参照してもよく、従って、他の方法では困難な、２個のほぼ等しい値の減算を行なうのに、単一の反復で十分である。補数を取った値及び補数を取らなかった値の両方を利用可能にする方が、桁上げを伝播する必要がなくなるため、２の補数を求めるよりも簡単且つ高速に行なえる。
【００７２】
対数加算の場合、Ｆａ表の値は次式で定義することができる。
【数２２】
2008502037.tif 000026
ここでｄは、好適にはＸＬが取り得る最大値、すなわち全桁１である増分を表わす。当該関数は、ＸＭによりアドレス指定される参照表として構成することができる。減算の場合、Ｆｓ表の値は次式で定義することができる。
【数２３】
2008502037.tif 000027
ＸＭの大きい値に対してＦａ（ＸＭ）＝Ｆｓ（ＸＭ）であり、且つ３２ビット演算および１６〜２４の範囲の引数に対して両方とも次式により正確に近似することができる。
【数２４】
2008502037.tif 000028
ここで、ＸＭ１はＸＭの整数部（小数点の左側のビット）、ＸＭ２は小数部、すなわち小数点の右側のビットである。カッコ内の関数は、小さい指数参照表に格納することができる。右シフタが整数部を実装することにより、小数ビットだけが指数関数を参照すればよくなるため、表のサイズが小さくなる。
【００７３】
図４に、指数近似（Ｅ）と真の関数値（Ｆａ、Ｆｓ）の類似を示す。引数が１６〜２４の範囲で変動する場合、Ｅは実質的にＦａおよびＦｓに等しい。さらに、図４はまた、次式の更なる近似値がどのように指数近似と真の関数値の差、すなわちｄＦａ＝Ｅ−ＦａおよびｄＦｓ＝Ｆｓ−Ｅを十分に近似するかを示す。
【数２５】
2008502037.tif 000029
従って、図４から分かるように、８〜１６の範囲のＸＭに対して、長さが８ビット以下の小さい補正値Ｅ２により補正された場合に、指数近似Ｅを用いてもよい。その結果は、２進小数点以下２４桁が必要な場合、長さが１７ビットである。
【００７４】
Ｅ曲線の下側の面積は、指数近似の実装に必要なシリコン面積に概ね近いため、図４は対数加算および対数減算演算用の関数表を実装するために必要な近似的シリコン面積をも示す。垂直スケールとして底が２の対数スケールを用いることは、高さが２進値でワード長を表わすことを意味する。水平スケールはそのような値の個数を表わす。従って、曲線の下側の領域は、曲線値を格納するために必要なＲＯＭのビット数を表わす。しかし、指数関数Ｅは周期的であり、その値は１増分される都度右シフトされる点を除いて繰り返される。従って、小数部ＸＭ２によりアドレス指定される１サイクルだけを格納して、その結果をＸＭ１が与える位置の個数分シフトすればよい。指数関数Ｅは従って、極めて小さい表で済む。さらに、補正値ｄＦまたはＥ２は明らかに元のＦａおよびＦｓ関数よりも曲線の下側の面積が小さいため、指数近似Ｅを用いて補正値ｄＦおよびＥ２を格納する方がＦａとＦｓを格納するよりも表サイズが小さくて済み、従って、より小さいシリコン面積で済む。
【００７５】
式（２９）は最下位ビットのＧ関数を次式で与える。
【数２６】
2008502037.tif 000030
ここで、（ｄ−ＸＬ）はｄが全１である場合のＸＬの補数に等しい。Ｇ（ＸＬ）の最小値は、ＸＭとＸＬの間の３１ビットの対数絶対値の分割に依存する。ＸＭが５．８形式である場合、ＸＬは０．００００００００ｘｘｘｘｘｘｘｘｘｘｘｘｘｘｘ形式であって２−８より小さい。従って、ＸＬ＝０の場合、Ｇの最小値は８．５である。形式（５．７）のＸＭの場合、Ｇの最小値は７．５であり、形式（５．９）のＸＭの場合、Ｇの最小値は９．５である。各サイクルでＸの値は少なくともＧの値分増加するため、３個のＧ値が平均して８を超える限り、Ｘは３サイクル以内に２４を超える。以下、説明の都合上引き続き３２ビット演算であると仮定する。Ｇの最小値が８．５である場合、格納されている値から底の値８を減算する場合がある。
【００７６】
複素数の対数演算
上で述べた各種の方法は一般に、実数に対する対数演算に当てはまる。しかし、無線通信信号は、実数と複素数表現の両方を利用する場合がある。例えば、実数および複素数信号処理の典型的な応用として無線信号処理が含まれる。無線システムにおいて、アンテナで受信された信号は、無線雑音を含んでおり、これを一連の複素数サンプルで表わすことができる。通常は、到達範囲を最大化すべく雑音に比較して可能な最も弱い信号を用いて情報を復旧することが望ましい。予想される雑音レベルよりはるかに良い量子化精度を用いても役立たないため、アンテナから集められたサンプルの複素数表現は従って、高精度のデジタル化を必要としない。しかし、複素数雑音信号を処理して情報を復旧してエラーを訂正した後で、雑音が除去されることが望ましく、その結果得られた情報は高精度の表現を必要とする場合がある。例えば、音声は一連の実数サンプルで表現できるが、処理された生のアンテナ信号は、音声の信号対雑音比の忠実度を上げるため、より高精度のデジタル表現が必要とされる場合がある。
【００７７】
実数に対する高精度の演算と、複素数に対するより低精度の演算の両方を提供する信号プロセッサは従って、携帯電話や携帯電話システム等の無線用途における関心事項である。このようなプロセッサは、プログラム記憶用のメモリ、処理中の実数および複素数データを格納するデータメモリ、実および複素数演算／論理ユニット（ＡＬＵ）、およびアナログ・デジタルおよびデジタル・アナログ変換器を含む入出力機器を含んでいてよい。データメモリは、ＡＬＵが設計されているのと同じワード長のワードを格納する。実数と複素数が同一メモリに格納できるよう、各々に同一ワード長を用いるのが論理的である。しかし、本発明はこれを必要とはしない。
【００７８】
通常、音声処理には１６ビットワードで十分である。従って、１６ビットの複素数表現が、アンテナにより受信された雑音信号を表わすのに十分なダイナミックレンジを提供するか否かの判定が関心事項である。このことは、１９８８〜１９９７の時期に欧州のＬ．Ｍ．エリクソンおよびその米国関連会社エリクソンＧＥにより製造されて販売された第１のデジタル携帯電話について当てはまるものと証明された。これらの携帯電話は８ビットの対数振幅（logamplitude）および７ビットの位相を含む１５〜１６ビットの対数極座標表現を用いた。これらの製品はまた、組み合わせて実装される、米国特許第５，０４８，０５９号明細書、同第５，１４８，３７３号明細書、および同第５，０７０，３０３号明細書（これらはここに参照により引用される）に基づいて、無線信号の複素対数極形式への直接デジタル化を用いている。
【００７９】
実数の場合、振幅の対数に対して任意の底を用いることができる。底としてｅを用いている場合、対数振幅はネーパー（neper）単位での瞬間的な信号レベルを表わす。公知のように、１ネーパーは約８．６８６デシベル（ｄＢ）に等しいため、形式ｘｘｘｘ．ｘｘｘｘの８ビットの対数振幅は、０〜１５と１５／１６ネーパー、約１３９ｄＢの範囲にわたり変動する信号レベルを表わす。
【００８０】
量子化誤差は、最下位ビットの半分あるいはネーパーの±１／３２または０．２７ｄＢであり、約３．２％のパーセンテージ誤差である。理論的には、この誤差は±３．２％の間に一様に分散していて、ピークにおいてＲＭＳ値が１／３、すなわち約１％である。量子化雑音は従って、信号レベルの１／１００、すなわち信号レベルより４０ｄＢ下であり、オーバーサンプリング、すなわち１秒あたり信号帯域１Ｈｚあたり１サンプルのナイキスト速度より多いサンプリングを用いればさらに少ないであろう。
【００８１】
対数極座標表現の利点は、量子化精度が信号レベルの全範囲にわたり不変である点である。トータルダイナミックレンジが１３９ｄＢである−４０ｄＢの量子化雑音は、大多数の無線信号用途に十分過ぎるほど正確であると思われる。
【００８２】
図５Ａに、図５Ｂの直交座標表現とは対照的に、対数極座標表現を用いて複素平面がどのように基本領域に分割されるかを示す。対数極座標チャートの中央にある白「穴」信号は、信号レベルが００００．００００ネーパー未満である箇所であり、一方、外側の円は１１１１．１１１１ネーパーの最大信号レベルである。００００．０００００の下限が、無線周波雑音レベルを１０ｄＢ下回るように選ばれた場合、ノイズエクスカーションが適切に表わされ、雑音の統計量が数値表現により極端に損なわれないことが保証される。このように、外側の円は雑音を１２９ｄＢ上回る信号レベルを表わし、最強の信号でさえこれを上回ることはありそうにない。
【００８３】
位相角の表現に用いるビット個数が有限であることによっても、量子化誤差や雑音が生じる。位相量子化からの雑音寄与は、ラジアン単位での最小位相ビット値の１／１２のＲＭＳ値を有する。８ビットを用いて位相を表わす場合、最小位相ビットの値は２π／２５６ラジアンであり、量子化雑音は従って２π／（１２*２５６）＝０．００２または信号レベルに対して−５３．８ｄＢである。これは、−４０ｄＢの対数振幅量子化雑音を下回る。
【００８４】
振幅を１ビット増やし、位相を１ビット減らすビット割当てにより、対数振幅量子化は約−４６ｄＢ、および位相量子化雑音は−４７．８ｄＢとなる。このように、１６ビットワード長を用いた場合、対数振幅ではｘｘｘｘ．ｘｘｘｘｘおよび位相では０．ｘｘｘｘｘｘｘ（２πを法とする）の対数極形式が示唆される。
【００８５】
対数振幅を表わすために底が２の対数を用いた場合、ｘｘｘｘ．ｘｘｘｘｘ形式の量子化雑音はｌｏｇｅ（２）すなわち３．１８ｄＢから−４９ｄＢまで減少する。ダイナミックレンジは１６ネーパーすなわち１３９ｄＢから１６×６ｄＢ＝９６ｄＢまで減少するものの、依然として十分である。
【００８６】
対数極座標数値は、対数振幅を最初に格納、すなわち｛ｘｘｘｘ．ｘｘｘｘｘ;０．ｘｘｘｘｘｘｘ}＝{ｌｏｇ（ｒ）;θ｝としても、あるいは位相を最初に格納、すなわち｛０．ｘｘｘｘｘｘｘ;ｘｘｘｘ．ｘｘｘｘｘ}＝｛θ;ｌｏｇ（ｒ）｝としてもよい。位相を、複素数の場合は単に２個の角度０度および１８０度を超えるものを表わす、実数の１ビット「位相」又は符号の拡張と考えれば有用であり、従って、「位相優先」形式はこれを表わす論理形式を提供する。複素数演算において、差異が０度（すなわち加算）または１８０度（すなわち減算）である数の組み合わせは、考慮すべき相対位相角の全範囲のうち２点に過ぎないため、加算と減算はほとんど区別できない。
【００８７】
対数極形式を用いて、２個の複素数の積は対数振幅部分の固定小数点加算（アンダーフローまたはオーバフローに注意する）およびオーバフローを無視する位相部分の固定小数点加算により得られ、角度は２πを法として計算される。２進位相ワードの量子化レベルが０〜２πの範囲にわたり均一に分散されている場合、２進加算のロールオーバーは、位相計算で求められる通り、２πを法とする演算と正確に一致する。同様に、２個の対数極座標複素数の商は固定小数点減算により得られる。
【００８８】
１６ビットの対数実数および１６ビットの対数極座標演算に同一ＡＬＵを用いることを考慮する際に、加算と減算との唯一の違いは、対数極座標の場合、対数振幅部分の加算または減算で生じるいかなる桁上げまたは桁下げも加算器または減算器の位相部分へ伝播することが許されず、あるいは対数振幅優先形式を用いた場合はその逆が許されない点にあることがわかる。
【００８９】
対数極形式で表された複素数に対数演算がどのように実行されるかを示すために以下を考慮する。式（３０）では、２個の直交座標複素数ｚ１およびｚ２を、底ｅの対数極形式Ｚ１およびＺ２で表わす。
Ｚ１＝（Ｒ１，θ１）＝ｌｏｇｅ（ｚ１）
Ｚ２＝（Ｒ２，θ２）＝ｌｏｇｅ（ｚ２）    （３０）
Ｚ３＝ｌｏｇｅ（ｚ３）但しｚ３＝ｚ１＋ｚ２を決定すべく、実数について上で述べたのと同様の手順を実行することができる。最初に、次式に注目する。
【数２７】
2008502037.tif 000031
Ｚ１がＺ２より大きい対数絶対値（Ｒ１）を有すると仮定し、上述のものと同様の論理を適用すれば、Ｚ３は以下のように表わされる。
【数２８】
2008502037.tif 000032
ここで、Ｚ＝Ｚ１−Ｚ２は、Ｒ１＞Ｒ２であるため正の実部Ｒ１−Ｒ２を有し、これはｅ−Ｚの絶対値が＜１であることを保証する。このように、Ｚ１およびＺ２を与えられてＺ３を計算する問題が、対数極座標の複素数変数Ｚ＝（Ｒ＋ｊθ）の関数ｌｏｇｅ（１＋ｅ−Ｚ）但しＲ＝Ｒ１−Ｒ２且つθ＝θ１−θ２、の計算に帰着する。上の例は底ｅを用いているが、当業者であれば任意の底を用いてもよいことが理解されよう。
【００９０】
Ｒ＞６の場合、小さい方の値の加算または減算は２進の５桁目に影響を及ぼさず、また結果は大きい方の値である。従って、Ｒについては２進小数点の左側３ビットだけを考慮すればよい。
【００９１】
関数ｌｏｇｅ（１＋ｅ−Ｚ）は、各種の手段により計算することができる。例えば、単一の表による１回の反復処理を用いてもよい。低精度または高精度の数値に適用できるが、高精度数値に求められる単一の参照表のサイズは極端に大きくなる恐れがある。参照表は、最適な構造であってよい。例えば、１６ビットの対数極座標演算の場合、θ成分がπずつ異なるアドレス値を一対ずつ格納すれば好都合であり、その場合、１６，３８４×３２ビットのＲＯＭを使用し、共役対称性を利用すればその半分で済む。これにより同じ組の入力値の複素対数加算および複素対数減算を１サイクルで同時に行なうことができる。
【００９２】
１対の値の１サイクルでの同時加算および減算はバタフライ演算として知られ、通常はバタフライ回路で実行される。図６に、低精度複素数バタフライ回路１００を含む例示的なＡＬＵを示す。バタフライ回路１００は、絶対値アキュムレータ１０２、位相アキュムレータ１０４、セレクタ１０６、参照表１０８、和コンバイナ（sum combiner）１１０、および差コンバイナ（difference combiner）１１２を含んでいる。Ｒ１がＲ２より大きい場合、対数絶対値アキュムレータ１０２はＲ＝Ｒ１−Ｒ２で表わされる対数絶対値差を計算し、一方、位相アキュムレータ１０４はθ＝θ１−θ２で表わされる位相角差を計算する。あるいは、Ｒ２がＲ１より大きい場合、絶対値アキュムレータ１０２はＲ＝Ｒ２−Ｒ１で表わされる対数絶対値差を計算し、一方、位相アキュムレータ１０４はθ＝θ２−θ１で表わされる位相角差を計算する。絶対値アキュムレータ１０２および位相アキュムレータ１０４は、計算された差を参照表１０８へ出力する。
【００９３】
参照表１０８は、全ての角度の複素数の対数の値を含んでいる。対数絶対値差および位相差により参照表１０８をアドレス指定することで、２個の対数極座標値Ｆ（Ｚ）およびＦ（Ｚ＋π）が得られる。必要ならば、常に正の角度引数を用いるようにし、元の角アドレスが負である場合、出力Ｆ（Ｚ）値の共役を求めることにより、当該表のサイズを半分にできる。
【００９４】
絶対値アキュムレータ１０２はまた、セレクタ１０６を制御して、Ｒ１およびＲ２の大きい方に基づいて、ＺＬとしてＺ１またはＺ２を選択する。セレクタ１０６は、和コンバイナ１１０および差コンバイナ１１２にＺＬを提供する。コンバイナ１１０、１１２はＺＬを２個の参照表出力Ｆ（Ｚ）およびＦ（Ｚ＋π）に加算することにより、２個の入力複素数に関連付けられた和出力対数および差出力対数を生成する。これにより、１演算で複素数のバタフライを実行する。
【００９５】
バタフライ演算は多くの場合、直交波周波数分割多重（ＯＦＤＭ）信号復号化等、各種の信号処理動作に必要とされる高速フーリエ変換（ＦＦＴ）を実行するために有用である。底が２のＦＦＴ演算の場合に、２π／２Ｎの倍数により位相角を補正するのが一般的であり、ここで２ＮはＦＦＴのサイズである。対数極形式において、旋回（twiddle）として知られるこれらの位相回転動作は、ささいなものであり（trivial）、位相部分に０．０００１０００のような倍数を加算するだけである。バタフライ回路１００における位相角を補正することは容易であるため、対数極形式で表された複素数をバタフライ回路１００に適用することにより、極めて効率的なバタフライおよび旋回を実行することができ、ＦＦＴにとり極めて好都合になる。ＦＦＴの底が２且つＮがθのワード長以下である限り、旋回動作において丸めが生じない。底が２以外のＦＦＴの場合、特別の対数極形式を工夫して、θがＦＦＴの底と同じ基数（radices）を用いて表わすことができる。参照表をうまく適合させることにより、本明細書に記載するアルゴリズムをそのような装置で用いることができる。
【００９６】
図７に、例えば図６に示したような多数の複素数バタフライ回路１００を用いる例示的な１６点ＦＦＴの実装方式を示す。バタフライ回路１００は、１６要素の配列において区別され選択された８個のペア値を組み合わせる。選択された和と差の出力は次いで、自身の角部分が補正されて、旋回として知られる複素回転を実行する。角度は、図に示すビット・パターンの２πを法とする加算により（by modulo-2π addition）補正される。２πを法とする加算は、図に示すように７ビットの角部分を用いる場合は単に１２８を法とする加算である。このようなＦＦＴは、マシンサイクル毎に完全ＦＦＴをフルに並列に処理および計算すべく、バタフライ回路１００の８×４＝３２個のコピーを用いて実行することができる。あるいは、このようなＦＦＴは、計算の４列の各々を順に実行すべく、８個のバタフライ回路１００の単一の列を連続して用いることができる。さらに、単一のバタフライ回路１００を繰り返し３２回用いてＦＦＴを実行してもよい。これらのオプションは、速度とサイズまたはコストとの間の所望のトレードオフに依存する。
【００９７】
複素数値の直交座標表現に比べた対数極座標量子化の利点は、信号が６０ｄＢのダイナミックレンジのどこにでも出現し得る場合、信号を例えば１％の精度で表わす問題を考えれば理解できよう。このことは、予想される信号レベルに関する警告を受信器に一切提供することがないバーストモード送信用の受信器で生じ得る。直交座標の部分を１％の精度で表わすには、最小信号レベルが１のオーダーである場合、約１／６４の最小ステップすなわち２進小数点の右側６ビットを必要とする。しかし、６０ｄＢの範囲にわたる信号を表わすには、表現信号がそれより１０００倍大きいことを必要とし、２進小数点の左側に追加的な１０ビットを必要とする。実部と虚部はこのように、Ｓ１０．６形式を有し、合計３４ビットとなることが必要である。しかし、上に示すように、同じ量子化精度およびダイナミックレンジは、対数極形式で１６ビットだけを用いて実現される。
【００９８】
合理的なサイズの単一の参照表で対応可能な精度より高い精度が必要な場合、上で述べた実数用の２表反復法を複素数に適合させることができる。高精度実数形式の３２ビットのワード長内に収まる複素数形式は、位相優先の形式の場合、例えば以下のように表わされる。
（０．ｘｘｘｘｘｘｘｘｘｘｘｘｘｘｘ;ｘｘｘｘｘ．ｘｘｘｘｘｘｘｘｘｘｘｘ）
または、簡便に（０．１５;５．１２）で表わす。位相のビット数を、対数振幅の２進小数点の右側のビット数より２〜３個多く選択することで、位相および振幅に関する量子化誤差が同様になる。１５ビット位相の最下位ビットの値は、２π×２−１５＝６．２８×２−１５である。Ｒ＝ｌｏｇ（ｒ）の２進１２桁目の位置の変化により、ｄ（ｌｏｇ（ｒ））＝ｄｒ／ｒ＝２−１２＝８×２−１５が得られる。
【００９９】
このように、ｌｏｇ（ｒ）の最下位ビットは、接線方向におけるθの最下位ビット１個分の移動より僅かに大きい半径方向の移動である。底２を用いて、ｌｏｇ（ｒ）の最下位ビットをｌｏｇｅ（２）＝０．６９によって５．５４×２−１５まで減少させる（Using base-2, the least significant bit of log(r) is reduced by loge(2)=0.69 to 5.54 * 2-15）。これはθの最下位ビットより僅かに小さい。重要ならば、２とｅの間の特別な底であるｅπ／４＝２．１９３２８を用いて、正確に等しい半径および接線方向の量子化が実現可能である。しかし、底２の方が実装面で利点があるため好ましい。例えば、形式５．１２の対数絶対値は底２を用いて、３２×６＝１９２ｄＢダイナミックレンジにわたる信号レベルを表わし、これは１６ビット形式の範囲の２倍である。さらに、量子化雑音は、全ての信号レベルについて、信号レベルを８０ｄＢを超えて下回る。これは、通常の用途での無線信号処理に十分以上に適切であり、量子化効果が必ず無視できることが求められる場合のシミュレーションにおいて、あるいは、不要な強い信号と必要な弱い信号の間の極端な差異を伴う干渉相殺等の重要用途において有用であろう。
【０１００】
２個の対数極座標値を対数加算または対数減算する場合、その結果は、それらの対数絶対値の差が大きくてｌｏｇ（ｒ）またはθの最下位ビットが影響を受けないならば、大きい方の対数絶対値を有する値である。従って、Ｒ１およびＲ２が２個の対数極座標Ｚ１およびＺ２の対数絶対値であり、ＲがＲ１とＲ２の差であって常に正ならば、以下の関数
ｌｏｇｅ（１＋ｅ−ｚ）＝ｌｏｇｅ（１＋ｅ−（Ｒ＋ｊθ））
は、Ｒが１３ｌｏｇｅ（２）＝９．０１１より大きい場合には、２進１２桁目までゼロである。
【０１０１】
このように、３２ビット対数極形式において底がｅの場合、０〜９の間の対数絶対値Ｒの差の値だけを考慮すればよい。同様に、底が２の場合、複素対数加算／減算関数の引数として、０〜１３の範囲にある対数絶対値の差の値だけを考慮すればよい。このように、Ｒを表わすのに２進小数点の左側４ビットで十分であるため、Ｒは形式４．１２となる。
【０１０２】
負のθについての複素対数加算／対数減算関数は正のθについての関数の共役であるため、θは０から、僅かにπより小さい値までの範囲に限定することができ、従って形式０．０ｘｘｘｘｘｘｘｘｘｘｘｘｘｘとなって、１４個の可変ビットだけを含む。本発明に至る研究を通じて、角度差における特別の値であるπ＝０．１００００００００００...を除外することにより、複素数反復に関する収束問題がほぼ解決することがわかった。この値は、対数絶対値の実数減算に正確に等しく、結果の角度は２個の入力引数角度のうちの１個であって、実数演算用のＦｓ関数を用いて最適に実行される。
【０１０３】
実数の場合と同様に、複素数用の反復方法は最初に、組み合わせる２個の引数Ｚ１およびＺ２の差Ｚ＝（θ，Ｒ）＝Ｚ１−Ｚ２を最上位および最下位部分に分割するステップを含んでいる。上述のように、Ｚの値は、実際には３０個の可変ビットしか必要としない。例えば、ＺＭをθの１４個の可変ビットの最上位７ビット、および１６ビットＲの最上位８ビット、すなわち位相優先表記でＺＭ＝（０．０ｘｘｘｘｘｘｘ;ｘｘｘｘ．ｘｘｘｘ）とする。
【０１０４】
従ってＺＬはＲの残りの最下位８ビットおよびθの７個の最下位ビットであり、形式ＺＬ＝（０．００００００００ｘｘｘｘｘｘｘ;００００．００００ｘｘｘｘｘｘｘｘ）となる。次いで、ＺＭ＋＝ＺＭ＋ｄＺを定義する。ここで、ｄＺの実部は０．０００１または０．００００１１１１１１１１、および虚部は０または０．１１１１１１１１１１１１１１１であり、すなわち２πより１ＬＳＢ分小さい。次いで、ＺＬ−をＺＭ＋−Ｚとして定義する。ｄＺを前者のように選択すれば、ＺＬ−はＺＬの可変ビットの２の補数であり、一方、ｄＺを後者のように選択すれば、それらのビットの補数となる。該補数の方が２の補数よりも容易に求められるため、ｄＺの実部および虚部には後者の選択が好ましい。このとき次式が得られる。
【数２９】
2008502037.tif 000033
ここで、
【数３０】
2008502037.tif 000034
である。
【０１０５】
関数
【数３１】
2008502037.tif 000035
はＲの８個の最上位ビットおよびθの７個の最上位ビットだけに依存し、従って、事前に計算してＺＭにより直接アドレス指定される３２，７６８ワードの表に格納しておくことができる。このため、処理中にＺＭ＋を生成する必要がない。
【０１０６】
関数
【数３２】
2008502037.tif 000036
はＲの７個のＬＳＢおよびθの８個のＬＳＢだけに依存し、これも事前に計算して３２，７６８ワードの参照表、すなわち複素数演算用のＧ関数として格納しておくことができる。後者は、一連の値Ｚ’、Ｚ”、Ｚ’’’等を計算するためにのみ必要であり、一方、所望の結果は、元の引数と、対数絶対値Ｚ１またはＺ２のうちの大きい方と、引数ＺＭ、Ｚ'Ｍ、Ｚ”Ｍ等に対する一連のＦ関数値との和である。研究により、複素対数加算／対数減算反復が収束するまで６回以下の反復が必要な場合があることがわかっており、最悪のケースは、Ｚ１とＺ２の角度が約１８０度開いていて絶対値がほぼ等しい場合である。上述のように角度が丁度１８０度開いている場合は、演算を実数減算として扱う。
【０１０７】
実数および複素数の両方の演算に同じＦ表で対応すべく、２個の追加的アドレス・ビットを用意して、実数加算用の表、実数減算用の表、および複素数加算／減算用の表を選択することができる。その関数をＦ（ｒｍ、ｏｐｃｏｄｅ）と表記することができる。ここで、ｒＭは複素数の場合は１５ビットの引数のうちの１４ビットであり、第１５ビットは２ビット演算コードの一部である。２ビット演算コードは、下表に示すように割り当てられる。
【０１０８】
【表３】
2008502037.tif 000037
【０１０９】
同様に、関数
【数３３】
2008502037.tif 000038
は、ＺＬの１５ビットだけに依存するため、事前に計算してＺＬ−により直接アドレス指定される参照表に格納しておくことができる。これは実数演算の場合のＧ表とサイズおよび機能が等しく、０が実数で１が複素数を示す「演算コード」引数を導入して適宜半分の３２，７６８ワードを選択することにより、実数Ｇ表と組み合わせて６５，５３６ワードの参照表とすることができる。
【０１１０】
複素数入力を最上位および最下位部分に分割することにより、２表反復処理を用いて実数に対数演算を実行するために用いたのと同一原理を、対数形式で表された複素数にも適用することができる。また、複素数入力を最上位および最下位部分に分割することにより、同時係属出願の米国出願第＿＿＿号明細書（代理人整理番号４０１５−５２８７）に記載されている多段パイプラインを、対数極形式で表された複素数に適用することができる。この同時係属出願はここに参照により引用される。同時係属出願におけるパイプラインでは、ＡＬＵがパイプラインの各段用に参照表の選択された部分を格納する。パイプラインの少なくとも１段は、当該段に関連付けられた部分出力を生成すべく対数極形式で表された段への入力を用いて参照表の選択された部分を実行する。多段パイプラインは、部分出力を組み合わせることにより、対数出力を生成する。
【０１１１】
θ＝πである場合、当該演算は実数減算に等しいことが分かる。この場合の結果はＲだけに依存し、そのために特別な参照表を１回限りの演算に用いることができる。あるいは、実数減算用の既存の参照表を用いてもよい。これは、Ｒの１４ビット０ｘｘｘｘ．ｘｘｘｘｘｘｘｘｘを用いてＦ表のＦｓ部分をアドレス指定し、Ｒの残り３ビットを１２個のゼロで拡張してＲＬの初期値として用いて、実数減算アルゴリズムを実行することにより行なうことができる。次いで、実数反復を、低下した複素数の精度に対応する出力レジスタに所望する精度のビットだけを累算することとは別に（apart from accumulating only the desired bits of precision in the output register corresponding to the reduce d complex）、また、Ｒ＞１８より早い停止基準を用いて、実行する。例えば、Ｒ＞９で十分である。
【０１１２】
実数および複素数対数演算用の共通ＡＬＵ
複素数および実数が、単一のシステム内の各種の信号を表わすために、使用される可能性がある。その場合、従来のプロセッサは、１個が複素対数演算を実行し、１個が実数対数演算を実行する別々のＡＬＵを含むことができる。しかし、２個の別々のＡＬＵは、かなり大きなシリコン・スペースを占有する。さらに、ある場合において、そのようなＡＬＵは、極端に大きい参照表を必要とする。従って、合理的なサイズの参照表により実数および複素数の対数演算の両方を実行する単一のＡＬＵを有することに利点がある。
【０１１３】
図８に、実数および複素数の対数演算の両方を実行する１個の例示的なＡＬＵ２００を示す。ＡＬＵ２００は、入力アキュムレータ２１０、参照コントローラ２２０、および出力アキュムレータ２３０を含んでいる。一般に、入力アキュムレータ２１０は２個の実数または複素数入力の差を計算し、一方、参照コントローラ２２０および出力アキュムレータ２３０は共同で、入力アキュムレータ２１０の実数または複素数の出力に基づいて、入力に応じた実数参照表または複素数参照表を用いて、出力対数を生成する。
【０１１４】
加算または減算される、対数形式で表された２個の実数または複素数Ａ、Ｂが入力アキュムレータ２１０へ逐次送られる。ストローブ・パルスの第１の発生に伴ない、ＡＬＵ２００は第１の数Ａを入力アキュムレータ２１０および出力アキュムレータ２３０にロードする。次いで第２の数Ｂが、減算のため角部分θまたは付随する符号が１８０度変えられて、入力アキュムレータ２１０へ送られる。
【０１１５】
ストローブの第２の発生に伴ない、入力アキュムレータ２１０はＡからＢを減算する。Ｂの対数絶対値がＡの対数絶対値より大きいことを示すアンダーフローが生じた場合、入力アキュムレータ２１０は値Ｘ＝Ｂ−Ａを格納して出力し、桁下げパルスを出力アキュムレータ２３０へ送信する。桁下げパルスにより、出力アキュムレータ２３０はＢを、付随する変更済みまたは未変更の符号（複素数の場合、角度）と共にロードして、Ａに上書きさせる。しかし、アンダーフローが生じていなければ、入力アキュムレータは値Ｘ＝Ａ−Ｂを格納して出力する。このようにして、出力アキュムレータ２３０は、ＡとＢのうち大きい方を保持し、一方、入力アキュムレータ２３０は｜Ａ−Ｂ｜を保持する。数値Ｘは、実数の場合は上式における数値ｒに等しく、複素数の場合は上式における数値Ｚに等しい。
【０１１６】
Ｘに基づいて、参照コントローラ２２０は２個の出力、すなわち部分出力Ｌおよび補正出力Ｙを決定する。参照コントローラ２２０は、ＡＤＤパルスと共に部分出力Ｌを出力アキュムレータ２３０へ出力することにより、出力アキュムレータ２３０の既存の内容に部分出力Ｌを累算させる。参照コントローラ２３０は、ＡＤＤパルスと共に補正出力Ｙを入力アキュムレータ２１０へ出力することにより、入力アキュムレータ２１０の既存の内容にＹを累算させ、Ｘの新たな値を生成する。このサイクルは、Ｙが所定の値に一致するか超えるまで繰り返される。Ｙが所定の値に一致または超えたならば、サイクルは停止して、所望の解答が出力Ｃとして出力アキュムレータ２３０から取得可能であることを示すＲＥＡＤＹ信号を参照コントローラ２２０が生成し、ＡＬＵ２００の状態は初期状態に戻って、ＡおよびＢの入力値の新たなペアを待機する。
【０１１７】
図９に、実数または複素対数算術演算用の１個の例示的な参照コントローラ２２０の更なる詳細を示す。参照コントローラ２２０は、Ｆ表２２２、Ｇ表２２４、コンバイナ２２６、およびシーケンサ２２８を含んでいる。Ｆ表２２２およびＧ表２２４は、複素数の対数を決定する複素数の参照表、および／または、実数の対数を決定する実数参照表を含んでいる。図９に示すＦ表２２２およびＧ表２２４は複素数と実数の両方の参照表を含んでいるが、当業者であればＦ表２２２および／またはＧ表２２４が複素数または実数の参照表の一方だけを含んでいてよいことが理解されよう。
【０１１８】
第１の３２ビット対数の数値Ａがアキュムレータ２１０および２３０に渡されたのに伴ない、開始ストローブがシーケンサ２２８へ渡される。シーケンサ２２８は入力アキュムレータ２１０へ負荷１のパルスを、および出力アキュムレータ２３０へ負荷２のパルスを送ることにより、これらに３２ビットの数値Ａを格納させる。第２の３２ビット対数の数値Ｂがアキュムレータ２１０、２３０渡されたのに伴ない、第２のストローブがシーケンサ２２８に渡される。
【０１１９】
シーケンサ２２８は、累算パルスを入力アキュムレータ２１０に提供する。入力アキュムレータ２１０が「桁下げ」パルスを出力して、Ｂの対数絶対値がＡの対数絶対値より大きいことを示した場合、シーケンサ２２８は別の負荷２のパルスを出力アキュムレータ２３０へ出力することにより、数値Ｂの符号または位相を含むＢの値を出力アキュムレータ２３０に格納させてＡを上書きする。実数の場合、対数絶対値が大きい方の値の符号が結果Ｃの符号になる。入力アキュムレータ２１０は、対数絶対値間の差Ｘの値を出力する。但し、Ｘが常に正であるように、Ａの方が大きい場合はＸ＝Ａ−Ｂ、Ｂの方が大きい場合はＸ＝Ｂ−Ａである。Ｘの最上位部分ＸＭがＦ参照表２２２に適用され、一方、Ｘの最下位部分ＸＬがＧ参照表２２４に適用される。
【０１２０】
実数の場合、入力アキュムレータ２１０の符号論理部が数値ＡとＢの符号のＸＯＲを求めて、参照表２２２のＦａ部分を使用すべきか否か（同符号は加算を意味する）、あるいはＦｓを使用すべきか否か（異符号は減算を意味する）を判定する。従って符号のＸＯＲは、Ｆ表２２２に対する追加的アドレス・ビットを形成する。
【０１２１】
入力アキュムレータ２１０内の値Ｘが停止閾値を超えない場合、シーケンサ２２８へ停止パルスが送られず、従ってシーケンサは、累算パルスを入出力アキュムレータ２１０、２３０へ送り続けることにより、コンバイナ２２６からの値Ｆ＋Ｇを入力アキュムレータ２１０に累算させ、部分出力Ｌを出力アキュムレータ２３０に累算させ、入力アキュムレータ２１０の内容に補正出力を累算させる。
【０１２２】
これは、出力アキュムレータ２３０がシーケンサ２２８に「停止」パルスを送ることにより自身の内容が停止閾値に到達したか超えたことを示すまで繰り返され、停止パルスが送られるとシーケンサ２２８は、出力アキュムレータ２３０内の値Ｃが最終結果であることを示す「準備完了」パルスを生成し、自身は開始状態へ戻る。
【０１２３】
図９の構成において、参照表２２２のＦｓ部分は負の値を格納し、これは対数加算または対数減算処理が進行中か否かを個別に示す必要なしに、アキュムレータ２１０、２３０内に適切に累算される。一方、全てのＦａ値が正であり、且つ全てのＦｓ値が負であるため、全てのＦｓの符号ビットを格納しなくて済むように、参照表から除外して、符号論理部から与えられた＋／−ビットの値を用いてもよい。符号ビットを除いて（less the sign bit）Ｆｓの真の負値を格納することは、その値を無効にして正の値を格納することとは異なり、その値を出力アキュムレータ２３０およびコンバイナ２２６から減算する必要がある。参照表サイズの圧縮を考慮する場合、後者に利点があることがわかる。参照表の圧縮は米国特許出願第＿＿＿号明細書（代理人整理番号４０１５−５２８８）に詳述されていて、その内容はここに参照により引用される。
【０１２４】
実装に際して考え得る他の変形例として、コンバイナ２２６の出力値ＹをＦ＋Ｇの負値とすることにより入力アキュムレータ２１０から減算できるようにして、入力アキュムレータ２１０が加算と減算命令を区別する必要性をなくすことが含まれる。負数は補数に１を加えたものであるため、全て最下位ビット１個分減らされたＧ表２２４の値を格納すると、補数出力を用いてこれを行なうことができる。しかし、一般にはＧ表２２４が他のシナリオで役立つ場合があるため、Ｇ表２２４の値は変更しないことが好ましい。
【０１２５】
図１０に、ＡＬＵ２００における複素数演算のより詳細を示す。複素数値の場合、入力アキュムレータ２１０は、２個の独立部分、すなわちＲ部２１０Ａおよびθ部２１０Ｂを含んでいる。入力アキュムレータのθ部２１０Ｂからの桁上げ出力がＲ部２１０Ａへ伝播すること（またはθ優先ビット順序の場合はこの逆）が禁止されていれば、実数演算で用いたのと同じ入力アキュムレータ２１０を複素数演算に用いてもよい。
【０１２６】
重要な点として、複素数のＦ表２２２をアドレス指定するビットの一部はθから、また一部はＲからのものである。実数の場合にＲのＬＳＢにより占有されている位置をθが占有したならば、入力アキュムレータとＦ表２２２との紐付け（connections）を複素数演算用に変更する必要がある。これはＧ表２２４にも当てはまる。これは、一組のセレクタスイッチ（図示せず）の実装を伴い得る若干の不都合である。該一組のセレクタスイッチは、実数および複素数演算用にＧおよびＦ表のアドレス入力に別個に紐付けるべく、入力アキュムレータ２１０から適切なビットを選択する。また、代替的な解決策を考案してもよい。すなわち入力アキュムレータ２１０と、ＦおよびＧ表との間の紐付けを、実数および複素数演算について同一に保つことができ、これにはＲおよびθへのビット割当てのインターリーブが必要となる。従って、この実装方式ではθの最上位ビットがＲの最下位ビットと交換されることにより、Ｒおよびθで最上位ビットは、実数の場合にＲの最上位ビットにより占有されたビット位置を占有し、Ｒおよびθの最下位ビットは、実数の場合にＲの最下位ビットにより占有されたビット位置を占有する。Ｒ加算器２２６Ａを形成するようにＲビットを繋げて保持し（to keep the R-bits connected）、同様に独立なθ加算器２２６Ｂを形成するようにθビットを繋げて保持するには、実数と比較して複素数の場合、３個の加算器段の桁上げビットをリルート（経路変更）することが必要になる。これが行なわれたならば、次に実数から複素数への紐付けが交差するのを防ぐため、出力アキュムレータ２３０と加算器２２６は同様に設定される。このことは、ＦおよびＧ表の出力ビットが、加算器２２６およびアキュムレータ２３０内で依然として同じ宛先に紐付けられていることをも保証するであろう。
【０１２７】
直前に述べた代替方式は、θ＝πのケースに、複素数用に実数減算表Ｆｓを用いたい場合、あまり実用的ではない。その場合、Ｒの全てのビットが、Ｆ表２２２のアドレス入力に紐付けられること、および同様に、その全ての出力ビットがアキュムレータ２３０のＲ加算器部分および加算器２２６に紐付けられることが求められる。その場合、リルーティング・スイッチの利用を避けて通れない。θ＝πのケースを反復なしに扱う場合、すなわち実数Ｆｓ表２２２を１回参照する場合、加算器ビットのリルーティングが避けられる。
【０１２８】
複素数θ＝πのケースに実数減算表を用いる際に扱うべき別のビット配置問題は、Ｒの２進小数点の左側ビット数が、実数（５ビット）の場合より複素数の場合の方が１個少ない（４ビット）ことである。また、実数反復は、例えば形式５．９の最上位ビットによりアドレス指定されるＦ表２２２を使用するが、反復なしに複素数に対してθ＝πのケースを扱うには、形式４．１２で差の値Ｒの全１６のビットによりＦ表２２２をアドレス指定する必要があり、これには異なるサイズの表を必要とする。
【０１２９】
図１１に、実数および複素数用に可能な異なるビット割当てを示す。図１１Ａに、形式８．２３で位置１の符号ビットＳから始まり、これに３１ビットの対数絶対値が続き、且つ形式５．９の最上位部分ＸＭおよび形式０．１４の最下位部分ＸＬへの分割を示す、実数対数値へのビット１〜３２の直接的割当てを示す。その下に、形式５．１２の対数振幅および形式０．１５の位相角へのビット１〜３２の直接的割当て、並びに形式４．４の最上位部分ＲＭおよび最下位８ビットＲＬへの対数振幅の分割を示し、ここで当該位相は、別途に示されるπに対応している１ビットを伴って、７ビットの最上位および最下位の部分に分割されている。実数と複素数の間に多くの不整列があることが、図１１Ａから明らかである。例えば、対数絶対値の２進小数点は同じ位置になく、また、Ｆ表２２２をアドレス指定するビット、すなわち、実数用のＸＭと複素数用のＲＭ、θＭは、同じビットではない。
【０１３０】
図１１Ｂに、２進小数点が実数および複素数の対数絶対値用に各々整列されているビット割当てを示す。これは、θ＝πである複素数の場合に実数Ｆｓ表２２２を、およびθ＝０である複素数の場合に実数Ｆａ表２２２を再使用しようと試みる場合にのみ関心が持たれる。しかし、ＦおよびＧ表をアドレス指定するビットは、依然として実数と複素数の場合で異なっている。
【０１３１】
図１１Ｃに、実数および複素数の両方で同じビットによってＦ表２２２をアドレス指定することを実現するビット割当てを示す。実数演算用にＦａおよびＧ表をアドレス指定するために、符号ビットＳおよび最上位部分ＸＭが隣接して配置されており、両方合わせて１５ビットのアドレスを生成し、複素数ケースの場合は同じ１５ビットが８ビットのＲＭと７ビットのθＭを含んでいる。
【０１３２】
同様に、ＲＬおよびθＬを含む１５ビットはＸＬの１４のビットと重なっていて、Ｇ表２２４のＲＯＭをアドレス指定する。実数の場合、複素数表の半分のサイズであるため、実数でＧ表２２４をアドレス指定する際には、ビット番号２は単に無視される。図１１Ｃに更に示すように、最上位および最下位部分の範囲内のビット順序が任意であるが、ある加算器段から次の上位段への桁上げ紐付けの個数が、実数演算と複素数演算とで変化しないまま、最大となるように（maximize the number of carry connections from one adder stage to the next in significance that remain unchanged between real and complex operation）、選択することができる。
【０１３３】
簡単な解決策は、複素数および実数用のＦ表２２２を、両ケースにおいて同じアドレス・ビットを使用する必要がある１個の巨大な表に組み合わせるのではなく、実数と複素数の場合とで異なる入力アキュムレータ２１０から選ばれた適切なアドレス・ビットに紐付けられた別々の表を用いることである。あるいは、実数および複素数用に別々のアドレスデコーダを用いてもよい。同様に、実数および複素用のＧ表２２４は、異なる表であっても、または少なくとも異なるアドレスデコーダであってよい。合計サイズは、θ＝πのケースに対する配慮を別にすれば、組み合わされた表とほぼ同じである。θ＝πのケースは、対数振幅がほぼ等しい、すなわちＲがほぼ０である場合にのみ、問題をはらんでいる。従って、これは、Ｒが００００．ｘｘｘｘｘｘｘｘｘｘｘｘまたは０．１２等の値である特別なケース、すなわち差Ｒの最上位４ビットがゼロであるケースとして、扱う必要がある。これには４０９６ワードの表だけで十分であり、従って実数Ｆｓ表２２２を使用可能にすべくビット線をリルーティングする複雑さを回避するために行なう価値がある。参照表がシリコンチップ面積を最大な割合で占有し、アキュムレータ、加算器、および他の周辺ロジックにより占有されるチップ面積が比較的小さいという前提で、結果的に得られるプロセッサがより速い処理速度を以って実数および複素数の演算を実行できる利点があるため、実数および複素数のアルゴリズムを別々に実装することが合理的であるとの結論に達する。
【０１３４】
本発明は無論、本発明の基本的特徴から逸脱することなく、本明細書に特に開示したものとは別の方法で実行することができる。本実施形態は、あらゆる点で説明が目的のものであって限定的ではなく、添付の特許請求の範囲の意味および均等の範囲内で生じる変更がすべて本発明に包含されることを理解されたい。
【図面の簡単な説明】
【０１３５】
図面の簡単な説明
【図１】ＩＥＥＥ浮動小数点形式と、実数用の真の対数形式を比較したプロット図を示す。
【図２】ＩＥＥＥ浮動小数点形式と、実数用の真の対数形式を比較したチャートを示す。
【図３】線型補間器のブロック図を示す。
【図４】真のＦ関数と、指数近似を比較したプロット図を示す。
【図５Ａ】対数極座標および直交座標表現の量子化域を示す。
【図５Ｂ】対数極座標および直交座標表現の量子化域を示す。
【図６】対数加算および対数減算演算を同時に実行する一つの例示的なＡＬＵのブロック図を示す。
【図７】図６のＡＬＵを用いた１６ポイントＦＦＴの実装例を示す。
【図８】本発明による例示的なＡＬＵのブロック図を示す。
【図９】図８のＡＬＵの例示的な参照コントローラのブロック図を示す。
【図１０】本発明による例示的なＡＬＵの更なる詳細を示す。
【図１１Ａ】実数に対する複素数の異なる割り当てを示す。
【図１１Ｂ】実数に対する複素数の異なる割り当てを示す。
【図１１Ｃ】実数に対する複素数の異なる割り当てを示す。
【図１】
2008502037.tif 000039
【図２】
2008502037.tif 000040
【図３】
2008502037.tif 000041
【図４】
2008502037.tif 000042
【図５Ａ】
2008502037.tif 000043
【図５Ｂ】
2008502037.tif 000044
【図６】
2008502037.tif 000045
【図７】
2008502037.tif 000046
【図８】
2008502037.tif 000047
【図９】
2008502037.tif 000048
【図１０】
2008502037.tif 000049
【図１１Ａ】
2008502037.tif 000050
【図１１Ｂ】
2008502037.tif 000051
【図１１Ｃ】
2008502037.tif 000052
【手続補正書】
【提出日】平成18年3月28日(2006.3.28)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
出力対数を計算する算術論理ユニット（ＡＬＵ）であって、
実数の対数を決定するための第１の参照表、および複素数の対数を決定するための第２の参照表を格納するメモリと、
実数入力オペランド用に前記第１の参照表、および複素数入力オペランド用に前記第２の参照表を用いて、対数形式で表された２個の入力オペランドに基づいて出力対数を生成する共有プロセッサとを含むＡＬＵ。
【請求項２】
前記出力対数が、前記入力オペランドの和または差の対数を表わす、請求項１に記載のＡＬＵ。
【請求項３】
前記ＡＬＵが、前記第１の参照表または前記第２の参照表を用いて、前記入力オペランド間の差の対数と、前記入力オペランドの和の対数とを同時に生成すべく構成されたバタフライ回路を含む、請求項１に記載のＡＬＵ。
【請求項４】
前記バタフライ回路が、
選択された入力オペランドを、前記第１または第２の参照表により提供される差分値と組み合わせて、前記入力オペランド間の差の対数を生成する第１のコンバイナと、
前記選択された入力オペランドを、前記第１または第２の参照表により提供される合計値と組み合わせて、前記入力オペランドの和の対数を生成する第２のコンバイナとを含む、請求項３に記載のＡＬＵ。
【請求項５】
前記共有プロセッサが、
前記第１または第２の参照表に基づいて１個以上の部分出力を計算すべく構成された参照コントローラと、
前記部分出力に基づいて出力対数を生成すべく構成された出力アキュムレータとを含む、請求項１に記載のＡＬＵ。
【請求項６】
前記出力対数を生成すべく用いられる部分出力の個数が、前記出力対数の所望の精度に基づいている、請求項５に記載のＡＬＵ。
【請求項７】
前記共有プロセッサが、前記出力対数を決定すべく前記参照コントローラにより２回以上の反復を実行し、各々の反復が前記部分出力の１個を生成する、請求項５に記載のＡＬＵ。
【請求項８】
前の反復の間に生成された部分出力に基づいて、現在の反復用の実数または複素数入力を生成すべく構成された入力アキュムレータをさらに含む、請求項７に記載のＡＬＵ。
【請求項９】
前記出力アキュムレータが、選択された入力オペランドおよび各々の反復の間に生成された部分出力に基づいて前記出力対数を生成する、請求項７に記載のＡＬＵ。
【請求項１０】
前記共有プロセッサが、絶対値が最大である入力オペランドを選択すべく構成された選択回路をさらに含む、請求項９に記載のＡＬＵ。
【請求項１１】
前記参照コントローラが、多段パイプラインを含んでいて、前記多段パイプラインの各段が前記部分出力の１個を生成する、請求項５に記載のＡＬＵ。
【請求項１２】
前記パイプラインの各段が、前記第１および第２の参照表の選択された部分を格納する、請求項１１に記載のＡＬＵ。
【請求項１３】
前記パイプラインの少なくとも１個の段が、実数段階入力を用いて前記第１の参照表の選択された部分を実行するか、または複素数段階入力を用いて前記第２の参照表の選択された部分を実行して、前記部分出力の１個を生成する、請求項１２に記載のＡＬＵ。
【請求項１４】
前記複素数入力オペランドの各々が、絶対値部分および位相部分を含む、請求項１に記載のＡＬＵ。
【請求項１５】
前記複素数入力オペランドの絶対値部分に基づいて、複素数入力の絶対値部分を生成する絶対値アキュムレータと、
前記複素数入力オペランドの位相部分に基づいて、前記複素数入力の位相部分を生成する位相アキュムレータとを含んでいる入力アキュムレータをさらに含む、請求項１４に記載のＡＬＵ。
【請求項１６】
算術論理ユニット（ＡＬＵ）において出力対数を計算する方法であって、
実数の対数を決定するための第１の参照表を格納するステップと、
複素数の対数を決定するための第２の参照表を格納するステップと、
実数入力オペランド用に前記第１の参照表、および複素数入力オペランド用に前記第２の参照表を用いて、共有プロセッサ内において対数形式で表された２個の入力オペランドに基づいて出力対数を生成するステップとを含む方法。
【請求項１７】
前記２個の入力オペランドに基づいて出力対数を生成するステップが、前記入力オペランドの和または差に基づいて出力対数を生成するステップを含む、請求項１６に記載の方法。
【請求項１８】
前記２個の入力オペランドに基づいて出力対数を生成するステップが、前記第１の参照表または前記第２の参照表を用いて、前記入力オペランド間の差の出力対数と、前記入力オペランドの和の出力対数とを同時に生成するステップを含む、請求項１６に記載の方法。
【請求項１９】
前記出力対数を同時に生成するステップが、
前記入力オペランド同士の比較に基づいて入力オペランドを選択するステップと、
前記選択された入力オペランドを、前記第１または第２の参照表により提供される差分値と組み合わせて、前記入力オペランド間の差の出力対数を生成するステップと、
前記選択されたオペランドを、前記第１または第２の参照表により提供される合計値と組み合わせて、前記入力オペランドの和の出力対数を生成するステップとを含む、請求項１８に記載の方法。
【請求項２０】
前記２個の入力オペランドに基づいて出力対数を生成するステップが、
前記第１または第２の参照表に基づいて１個以上の部分出力を計算するステップと、
前記部分出力に基づいて出力対数を生成するステップとを含む、請求項１６に記載の方法。
【請求項２１】
前記出力対数を決定すべく２回以上の反復を実行するステップをさらに含み、各々の反復が前記部分出力の１個を生成する、請求項２０に記載の方法。
【請求項２２】
前の反復の間に生成された部分出力に基づいて、現在の反復用の入力を生成するステップをさらに含む、請求項２１に記載の方法。
【請求項２３】
前記部分出力に基づいて出力対数を生成するステップが、多段パイプラインの各段において生成された部分出力に基づいて出力対数を生成するステップを含む、請求項２０に記載の方法。
【請求項２４】
前記多段パイプラインの各段について、前記第１および第２の参照表の選択された部分を格納するステップをさらに含む、請求項２３に記載の方法。
【請求項２５】
前記パイプラインの少なくとも１段において、実数または複素数段階入力に基づいて、前記第１または第２の参照表の選択された部分を各々実行して、前記部分出力の１個を生成するステップをさらに含む、請求項２４に記載の方法。
【請求項２６】
前記複素数入力オペランドの各々が、絶対値部分および位相部分を含む、請求項１６に記載の方法。
【請求項２７】
前記複素数入力オペランドの絶対値部分に基づいて、複素数入力の絶対値部分を生成するステップと、
前記複素数入力オペランドの位相部分に基づいて、前記複素数入力の位相部分を生成するステップとさらに含む、請求項２６に記載の方法。
【請求項２８】
実数入力オペランドおよび複素数入力オペランドが同じワード長を有するように再フォーマットされる、請求項１６に記載の方法。
【請求項２９】
複素数の出力対数を計算する算術論理ユニット（ＡＬＵ）であって、
複素数の対数を決定するための参照表を格納するメモリと、
前記格納された参照表を用いて、対数極形式で表された複素数入力オペランドの算術的組み合せの出力対数を生成するプロセッサとを含み、
前記プロセッサが、
前記参照表に基づいて２個以上の部分出力を反復的に計算すべく構成された参照コントローラと、
前記部分出力に基づいて出力対数を生成すべく構成された出力アキュムレータとを含むＡＬＵ。
【請求項３０】
前記プロセッサが、前記出力対数を生成すべく前記参照コントローラにより２回以上の反復を実行し、各々の反復が前記部分出力の１個を生成する、請求項２９に記載のＡＬＵ。
【請求項３１】
前の反復の間に生成された部分出力に基づいて、現在の反復用の複素数入力を生成すべく構成された入力アキュムレータをさらに含む、請求項３０に記載のＡＬＵ。
【請求項３２】
前記参照コントローラが、多段パイプラインを含んでいて、前記多段パイプラインの各段が前記部分出力の１個を生成する、請求項２９に記載のＡＬＵ。
【請求項３３】
前記複素数入力オペランドが絶対値部分および位相部分を含む、請求項２９に記載のＡＬＵ。
【請求項３４】
さらに入力アキュムレータを含んでおり、該入力アキュムレータが、
前記複素数入力オペランドの絶対値部分に基づいて、複素数入力の絶対値部分を生成する絶対値アキュムレータと、
前記複素数入力オペランドの位相部分に基づいて、前記複素数入力の位相部分を生成する位相アキュムレータとを含んでいる、請求項３３に記載のＡＬＵ。
【請求項３５】
前記位相部分が前記複素数入力の最上位部分を含み、前記絶対値部分が前記複素数入力の最下位部分を含む、請求項３３に記載のＡＬＵ。
【請求項３６】
前記参照表が絶対値参照表および位相参照表を含む、請求項３５に記載のＡＬＵ。
【請求項３７】
前記複素数入力の最上位部分が前記位相参照表をアドレス指定し、前記複素数入力の最下位部分が前記絶対値参照表をアドレス指定する、請求項３６に記載のＡＬＵ。
【請求項３８】
複素数の出力対数を計算する算術論理ユニット（ＡＬＵ）であって、
複素数の対数を決定するための参照表を格納するメモリと、
対数極形式で表された複素数入力オペランドの少なくとも１個の算術的組み合せの出力対数を生成すべく構成されたプロセッサとを含み、前記プロセッサが、前記参照表に基づいて、前記複素数入力オペランド間の差の出力対数と、前記複素数入力オペランドの和の出力対数とを同時に計算すべく構成されたバタフライ回路を含むＡＬＵ。
【請求項３９】
前記バタフライ回路が、
選択された入力オペランドを、前記参照表により提供される差分値と組み合わせて、前記複素数入力オペランド間の差の出力対数を生成する第１のコンバイナと、
前記選択された入力オペランドを、前記参照表により提供される合計値と組み合わせて、前記複素数入力オペランドの和の出力対数を生成する第２のコンバイナとを含む、請求項３８に記載のＡＬＵ。
【請求項４０】
算術論理ユニット（ＡＬＵ）において複素数の出力対数を計算する方法であって、
対数極形式で表された複素数の対数を決定するための参照表を格納するステップと、
前記格納された参照表を用いて、プロセッサ内において対数極形式で表された複素数入力オペランドに基づいて出力対数を生成するステップとを含み、該生成するステップが、
前記参照表に基づいて２個以上の部分出力を反復的に計算して、
前記部分出力に基づいて出力対数を生成することにより、行われる、方法。
【請求項４１】
前記出力対数を生成すべく２回以上の反復を実行し、各々の反復が前記部分出力の１個を生成する、請求項４０に記載の方法。
【請求項４２】
前記出力対数を生成するステップが、多段パイプラインを実行して出力対数を生成するステップを含んでいて、前記多段パイプラインの各段が前記部分出力の１個を生成する、請求項４１に記載の方法。
【請求項４３】
前記複素数入力オペランドの絶対値部分に基づいて、複素数入力の絶対値部分を生成するステップと、
前記複素数入力オペランドの位相部分に基づいて、前記複素数入力の位相部分を生成するステップとさらに含む、請求項４０に記載の方法。
【請求項４４】
前記位相部分が前記複素数入力の最上位部分を含み、前記絶対値部分が前記複素数入力の最下位部分を含む、請求項４３に記載の方法。
【請求項４５】
前記参照表が絶対値参照表および位相参照表を含む、請求項４４に記載の方法。
【請求項４６】
前記複素数入力の最上位部分を用いて前記位相参照表をアドレス指定するステップと、前記複素数入力の最下位部分を用いて前記絶対値参照表をアドレス指定するステップとをさらに含む、請求項４５に記載の方法。
【請求項４７】
算術論理ユニット（ＡＬＵ）において複素数の出力対数を計算する方法であって、
対数極形式で表された複素数の対数を決定するための参照表を格納するステップと、
前記格納された参照表を用いて、プロセッサ内において対数極形式で表された複素数入力オペランドに基づいて出力対数を生成するステップとを含み、該生成するステップが、
前記参照表に基づいて、前記複素数入力オペランド間の差の出力対数と、前記複素数入力オペランドの和の出力対数とを同時に計算することにより、行われる、方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０１１０
【補正方法】変更
【補正の内容】
【０１１０】
複素数入力を最上位および最下位部分に分割することにより、２表反復処理を用いて実数に対数演算を実行するために用いたのと同一原理を、対数形式で表された複素数にも適用することができる。また、複素数入力を最上位および最下位部分に分割することにより、同時係属出願の米国出願第１１／１４２４８５号明細書に記載されている多段パイプラインを、対数極形式で表された複素数に適用することができる。この同時係属出願はここに参照により引用される。同時係属出願におけるパイプラインでは、ＡＬＵがパイプラインの各段用に参照表の選択された部分を格納する。パイプラインの少なくとも１段は、当該段に関連付けられた部分出力を生成すべく対数極形式で表された段への入力を用いて参照表の選択された部分を実行する。多段パイプラインは、部分出力を組み合わせることにより、対数出力を生成する。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】０１２３
【補正方法】変更
【補正の内容】
【０１２３】
図９の構成において、参照表２２２のＦｓ部分は負の値を格納し、これは対数加算または対数減算処理が進行中か否かを個別に示す必要なしに、アキュムレータ２１０、２３０内に適切に累算される。一方、全てのＦａ値が正であり、且つ全てのＦｓ値が負であるため、全てのＦｓの符号ビットを格納しなくて済むように、参照表から除外して、符号論理部から与えられた＋／−ビットの値を用いてもよい。符号ビットを除いて（less the sign bit）Ｆｓの真の負値を格納することは、その値を無効にして正の値を格納することとは異なり、その値を出力アキュムレータ２３０およびコンバイナ２２６から減算する必要がある。参照表サイズの圧縮を考慮する場合、後者に利点があることがわかる。参照表の圧縮は米国特許出願第１１／１４３１５７号明細書に詳述されていて、その内容はここに参照により引用される。
【国際調査報告】
2008502037.tif 000053
2008502037.tif 000054
2008502037.tif 000055
2008502037.tif 000056