(57)【特許請求の範囲】
【請求項１】
１個、２個又は３個の１０進ディジットを受け取るステップと、
１個の１０進ディジットが受け取られた場合には該受け取られた１０進ディジットに２個の１０進ディジットの０を付加して３個の１０進ディジットとするステップと、
２個の１０進ディジットが受け取られた場合には該受け取られた１０進ディジットに１個の１０進ディジットの０を付加して３個の１０進ディジットとするステップと、
１個の１０進ディジットが存在する場合には最初の６個の２進ビットが０であり、２個の１０進ディジットが存在する場合には最初の３個の２進ビットが０であるエンコーディング方式を使用して前記１０進ディジットを１０個の２進ビットにエンコードするステップと、
前記１０個の２進ビットを出力するステップを有し、
前記１０個の２進ビットの出力は一次インジケータ・フィールドを含み、該一次インジケータ・フィールドは前記１０個の２進ビットのうちの第１ビットではないことを特徴とする、
１０進ディジットを２進ビットに変換する方法。
【請求項２】
前記一次インジケータ・フィールドは前記１０個の２進ビットのうちの最後のビットではない、請求項１に記載の方法。
【請求項３】
前記一次インジケータ・フィールドは前記１０個の２進ビットのうちの第７ビットである、請求項１に記載の方法。
【請求項４】
前記一次インジケータ・フィールドは前記３個の１０進ディジットがすべて小であるかどうかを表す、請求項１乃至３のいずれかに記載の方法。
【請求項５】
１０進ディジットが０−７の範囲にある場合には該１０進ディジットは小であると見なされ、１０進ディジットが８又は９である場合には該１０進ディジットは大であると見なされる、請求項４に記載の方法。
【請求項６】
前記３個の１０進ディジットが小ではないディジットを含む場合、前記１０個の２進ビットは二次インジケータ・フィールドを含む、請求項５に記載の方法。
【請求項７】
前記二次インジケータ・フィールドは２個のビットを含む、請求項６に記載の方法。
【請求項８】
前記二次インジケータ・フィールドの前記２個のビットは前記１０個の２進ビットのうちの第８及び第９ビットである、請求項７に記載の方法。
【請求項９】
前記１０進ディジットのうちの２個以上のディジットが大である場合、前記１０個の２進ビットは三次インジケータ・フィールドを含む、請求項８に記載の方法。
【請求項１０】
前記１０個の２進ビットは０−７９の範囲におけるすべての１０進数に対して前記１０進ディジットの２進化１０進コーディングに対応する、請求項１乃至９のいずれかに記載の方法。
【請求項１１】
１個、２個又は３個の１０進ディジットを受け取る手段と、
１個の１０進ディジットが受け取られた場合には該受け取られた１０進ディジットに２個の１０進ディジットの０を付加して３個の１０進ディジットとする手段と、
２個の１０進ディジットが受け取られた場合には該受け取られた１０進ディジットに１個の１０進ディジットの０を付加して３個の１０進ディジットとする手段と、
１個の１０進ディジットが存在する場合には最初の６個の２進ビットが０であり、２個の１０進ディジットが存在する場合には最初の３個の２進ビットが０であるエンコーディング方式を使用して前記１０進ディジットを１０個の２進ビットにエンコードする手段と、
前記１０個の２進ビットを出力する手段を有し、
前記１０個の２進ビットの出力は一次インジケータ・フィールドを含み、該一次インジケータ・フィールドは前記１０個の２進ビットのうちの第１ビットではないことを特徴とする、
１０進ディジットを２進ビットに変換するシステム。
【請求項１２】
前記一次インジケータ・フィールドは前記１０個の２進ビットのうちの最後のビットではない、請求項１１に記載のシステム。
【請求項１３】
前記一次インジケータ・フィールドは前記１０個の２進ビットのうちの第７ビットである、請求項１１に記載のシステム。
【請求項１４】
前記一次インジケータ・フィールドは前記３個の１０進ディジットがすべて小であるかどうかを表す、請求項１１乃至１３のいずれかに記載のシステム。
【請求項１５】
１０進ディジットが０−７の範囲にある場合には該１０進ディジットは小であると見なされ、１０進ディジットが８又は９である場合には該１０進ディジットは大であると見なされる、請求項１４に記載のシステム。
【請求項１６】
前記３個の１０進ディジットが小ではないディジットを含む場合、前記１０個の２進ビットは二次インジケータ・フィールドを含む、請求項１５に記載のシステム。
【請求項１７】
前記二次インジケータ・フィールドは２個のビットを含む、請求項１６に記載のシステム。
【請求項１８】
前記二次インジケータ・フィールドの前記２個のビットは前記１０個の２進ビットのうちの第８及び第９ビットである、請求項１７に記載のシステム。
【請求項１９】
前記１０進ディジットのうちの２個以上のディジットが大である場合、前記１０個の２進ビットは三次インジケータ・フィールドを含む、請求項１８に記載のシステム。
【請求項２０】
前記１０個の２進ビットは０−７９の範囲におけるすべての１０進数に対して前記１０進ディジットの２進化１０進コーディングに対応する、請求項１１乃至１９のいずれかに記載のシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、特にコンピュータ・システム等において使用するための１０進数から２進数への変換及びその逆の変換に関するものである。
【０００２】
【従来の技術】
恐らく我々が両手の各々に５本の指を持っているという生物学的な事実（又は、偶然）のために、人間による数学は、多分に１０進方式に基づいている。それとは対照的に、物理的な理由のために、現代のディジタル・コンピュータ・システムは、信号の存在により１が表され且つ信号の不在により０が表されること（或いは、その逆）でもって、それらの内部処理に対しては２進数を使用する。従って、ほとんどの数値入力データは１０進形式でコンピュータに与えられるであろう。これは、その後に処理のために２進数に変換され、出力のために１０進数に逆変換されなければならない。
【０００３】
１０進数を２進数として表すいくつかの既知の方法が存在する。我々が整数だけを考察する場合、明らかに１０進整数から２進整数へのダイレクト・マッピングが存在する（例えば、２３５は１１１０１０１１になる）。実数に話を進めると、恐らく、最も自然な方法は、小数点の右の第１ディジットが１／２を表し、ｎ番目のディジットが１／２ｎを表すように、小数点を２進数に導入することである。この方法の場合の１つの問題点は、０．１（１０進数）が２進数では連分数であり、従って、正確には表され得ないということである。これは、１０進数から２進数への及びその逆への反復した変換によってまるめ誤差が増幅する可能性に通じる。
【０００４】
それとはわずか異なる方法は、整数の累乗指数を使用して小数点位置を別個に記録することにより実数でもって対処するように整数表示を拡張することである（これは、固定小数点実数ではなく浮動小数点実数と呼ばれる）。従って、２３５は、指数の値に従って２３．５、２．３５、０．２３５等になり得る。これは上記の連分数の問題点を克服するが、依然として十分に満足し得るものではない。２進数と１０進数との間の変換はハードウエア設計に関しては特に簡単というわけではない（この種の機構は、ほとんど常に、速度の関係でハードウエアによって与えられ）。これの理由は、一般的に云えば、そのような変換が単純なビット操作ではない２進数の加算を必要とするということである。また、出力のためには１０進数を切り捨て又は丸めなければならないことが割に一般的であり、このコーディング技法でもってそのような切り捨て又は丸めを行う（即ち、数値全体の変換を最初に行うことなく行う）という速い方法がない。例えば、適当な指数と共に１．２７を表す０１１１１１１１は１．３に丸められるし、１．２４を表す０１１１１１００は１．２に丸められる。
【０００５】
これらの問題点を回避する１つの方法は２進化１０進数を使用することである。この場合、各１０進ディジット（０−９）は対応する４ビットの２進数によってエンコードされるので、一連の１０進ディジットは４ビットの２進数を連結することによって表され得る。これは任意の所与の１０進ディジットを他のディジットと無関係に素速く検索することを可能にし、従って、簡単な丸め及び切り捨てを行うことを可能にする。しかし、これは、記憶装置の効率を大きく失うという犠牲を払って達せられた。潜在的には、４ビットは０−９よりも０−１５を記憶することができる。
【０００６】
底ｒを使用して整数Ｘを記憶するために必要とするディジットの数ＮｒがＮｒ≒ｌｏｇｒ（Ｘ）  となるということを留意することによって、我々は記憶効率を形式的に測定することができる。従って、漸近的には（即ち、非常に大きい数に対しては）所与の数の２進数記憶のために使用されるディジット対その数の１０進数記憶のために使用されるディジットの比率は次のようになる。
0003588349.tif 000002
【０００７】
２進化１０進数は２進ディジットの数及び１０進ディジットの数の間で４の比率を有するので、これはわずか  ３．３２２／４＝０．８３  という効率を与えるに過ぎない。別の方法で表現すれば、理論的には  ４，２９４，９６７，２９５  を２進整数として記憶し得る３２ビットのシステムは、今や、９９，９９９，９９９を１０進整数として記憶することができるだけであり、最大数の観点では係数≒４０の減少である。
【０００８】
この欠点を克服するために、チェン（Ｃｈｅｎ）氏及びホー（Ｈｏ）氏によって一種のハイブリッド・アルゴリズムが開発された（Ｃｏｍｍｕｎｉｃａｔｉｏｎｓ  ｏｆ  ｔｈｅ  ＡＣＭ，  Ｊａｎｕａｒｙ  １９７５，  ｖ１８／１，  ｐ４９−５２  参照）。これは、２１０＝１０２４≒１０３  という事実に基づいている（勿論、この対応関係はすべてのコンピュータ記憶装置のサイズの基礎になっており、従って、実際には８Ｋバイトは８０００バイトではなく、８＊１０２４に対応している）。従って、チェン／ホーのアルゴリズムは３個の１０進ディジットを取り、それらを１０個の２進ビットにエンコードする。これは、対応する１０個の２進ビットを単にデコードすることによって任意の所与のロケーションにおける１０進ディジットの比較的速い検索を可能にするが、３．３２２／（１０／３）＝９９．６６％  という高い（漸近最大値の）記憶効率を保持する。
【０００９】
チェン／ホーのアルゴリズムは、３個の１０進ディジット（その各々が４個の２進ビットによって表される）に対応した１２ビットを有する１０進化２進数から１０ビットの２進数へのマッピングとして最もよく理解される。従って、そのアルゴリズムへの入力は、（ａｂｃｄ），（ｅｆｇｈ），（ｉｊｋｌ）と書かれ得るものである。この場合、各括弧で括られた４文字のグループは１０進ディジットに等価の１０進化２進数表示に対応する。１０個の出力ビットは  ｐｑｒｓｔｕｖｗｘｙ  として示され得る。入力ストリングから出力ストリングへのマッピングの詳細が下記の表１に示される。
【００１０】
【表１】
0003588349.tif 000003
【００１１】
チェン／ホーのアルゴリズムは、１０進ディジット０−７が３個の２進ビットでエンコードされ得るという観点に基づいている。従って、これらの１０進ディジットは「小」と見なされ、一方１０進ディジット８及び９は「大」と見なされる。１０進ディジットが小である場合、それの第１ビット（２進数で表された時の第１ビット）は０であり、それが大である場合にはそれの第１ビットは１であるが次の２ビットはいつも０である（それは、１０進方式では９を越える個々の数が必要ないためである）。従って、各２進化１０進数に対する第１ビットは、その数が小（０）であるか又は大（１）であるかを決定する。それは、インジケータ・ビットとして知られている。３個の１０進ディジットに関しては、３個のインジケータ・ビットに関して合計２３＝８個の可能性が存在し、これらは表１における８つの行に対応する。換言すれば、マッピングを行うためにその表におけるどの行が使用されるかはインジケータ・ビットの値に依存する。
【００１２】
表１における第１行に対応して３個の１０進ディジットすべてが小である場合（５１．２％の可能性）、これはｐ出力位置における０によって表される。残りの９ビットは３個の３のグループに分けられ、１０進ディジットの各々の値を標準形式で表す（１０進ディジットがすべて小であるので、これらはすべて０−７の範囲になければならない）。
【００１３】
１０進ディジットのうちの１個だけが大である場合（３４．８％の可能性）、ｐは１にセットされる。次の２ビット（ｑ及びｒ）は、３個の１０進ディジットのうちのどれが大であるか（それぞれ、第１、第２、又は第３）を表すために００、０１、又は１０にセットされる。残りの７ビットは、２個の小ディジットをエンコードするための２個の３のグループ及び大ディジットをエンコードするための１個の更なるビットに分けられる。（大の１０進数である８又は９に対しては２つの可能性しか存在しないので、実際の値は、２進化１０進数における最後のビットに対応する１個のビット、即ち、適宜ｄ、ｈ、又はｌによって表され得ることは明らかである）。
【００１４】
１０進ディジットのうちの２個が大である場合（９．６％の可能性）、ｐ、ｑ及びｒはすべて１にセットされる。１個の小の１０進ディジットの位置（第１、第２、又は第３ディジット）を表すために更なる２ビット（ｔ及びｕ）が００、０１、１０にセットされる。これは最後の５ビットを残しており、その５ビットのうちの３ビットは１個の小ディジットをエンコードするために使用され、残りの２ビットの各々は２個の大ディジットの１個に割り当てられる。
【００１５】
最後に、３個の１０進ディジットすべてが大である場合（０．８％の可能性）、ｐ、ｑ、ｒ、ｔ及びｕはすべて１にセットされる。残りの５ビットのうちの３ビットは３個の大ディジットの各１個をエンコードするために使用され、残りの２ビット（ｗ及びｘ）は０にセットされる。
【００１６】
チェン／ホーの値から２進化１０進数に戻るための適当なデコード・アルゴリズムは表１の内容を逆に使うことによって簡単な方法で効率的に得られ、それは彼らの論文に示されている。この目的のためには、表のどの行がそのエンコードのために使用されたかを決定することが先ず必要であるということに留意してほしい。これは、最初にｐビットの値を見ることによって、及びこれが１である場合にはｑ及びｒビットの値を見ることによって、及びこれらが共に１である場合にはｔ及びｕビットの値を見ることによって確認され得る。従って、ｐビットは一次インジケータ・フィールドと見なされ、ｑ、ｒ、ｔ及びｕビットは二次インジケータ・フィールドとして見なされ得る。
【００１７】
チェン及びホーは、それらのインジケータ・フィールドがハフマン・コードの形式である見なすことができる。このコードでは、それは、最も可能性の高いデータ値に対しては最短であって、可能性の低い値が益々大きい長さを有するという可変長を持っている。更に、インジケータ・フィールドの値は、それらがいつも相互に適正に区別されるように注意深く選択される。しかし、チェン／ホーのアルゴリズム全体は、無効のビット組み合わせの２進化１０進値を除去することによってそれが働くというハフマン圧縮の形ではない。（対照的に、ハフマン圧縮は短いコードを共通の記号に割り当て、長いコードを生の記号に割り当て、統計的に平均したコード長により総合的な恩恵を受けている。）
【００１８】
チェン／ホーのアルゴリズムの重要な利点は、３個のインジケータ・ビット（ａ、ｅ及びｉ）のテストに基づいて、２進シフト、挿入及び削除しか存在しないということである。更に、インジケータ・フィールドの外のビット割り当てが、できるだけビット・マッピングを単純化するように設計されていたことは明らかであろう。従って、ビットｄ、ｈ及びｌ（各入力１０進ディジットにおける最下位ビット）は、それぞれビットｓ、ｖ及びｙにいつもそのままマップしている。従って、全体的には、コーディングの非常に速い効率的なハードウエア・インプリメンテーションが可能である。
【００１９】
【発明が解決しようとする課題】
３個の１０進ディジットを１０個の２進ディジットにエンコードするための別の方法もこの分野では知られていることに留意してほしい。米国特許第３，６１８，０４７号は、チェン／ホーのアルゴリズムに非常に類似した原理に基づくコーディング方式を開示している。３個の１０進ディジットの各々を０−９９９の範囲における整数として単純に扱い、対応する２進整数に変換することが可能であるということはスミス（Ｓｍｉｔｈ）氏によっても指摘されている（Ｃｏｍｍｕｎｉｃａｔｉｏｎｓ  ｏｆ  ＡＣＭ，  Ａｕｇｕｓｔ  １９７５，  ｖ１８／８，  ｐ４６３  参照）。これは、１０進数から２進数への及びその逆の変換を概念的には非常に簡単なものにする。しかし、１０進化２進数から圧縮２進数への変換及びそれを戻す変換に伴う操作はチェン／ホーのアルゴリズムに必要なものよりもかなり複雑である。
【００２０】
チェン／ホー氏及びスミス氏による上記２つの論文は可変長コーディング、換言すれば、Ｎ個の１０進ディジットが可変長の２進ストリングにエンコードされるコーディングの可能性も検討している。しかし、そのような方法は標準的なコンピュータ・システムに組み込むことが難しく、本願ではこれ以上検討されないであろう。
【００２１】
上記のチェン／ホーのアルゴリズムによる１つの欠点は、それが３個の１０進ディジットのグループから１０個の２進ビットへの変換に関して働くだけであるということである。しかし、コンピュータ・システムはほぼ２の累乗の大きさに作られ（１６ビット、３２ビット、６４ビット）、従って、これらの大きさは実際には１０で直接に割り切れないであろう。上記のチェン／ホーのアルゴリズムをそのまま使用することは残りのビットをすべて単純に無駄にすることになろう。例えば、６４ビットのシステムでは、６４個の利用可能なビットのうちの６０個を使用して、６＊３＝１８個の１０進ディジットが記憶され得るだけである。確かにこれは２進化１０進数によって得られる１６個の１０進ディジットに関する改良ではあるけれども、実用上の記憶効率は、理論的な最大値よりもかなり低い３．３２２／（６４／１８）≒０．９３に減少している。
【００２２】
事実、チェン／ホーのアルゴリズム（上記の同じ論文におけるもの）及び米国特許第３，６１８，０４７号の両方とも２個の１０進ディジットを７個のビットにコード化するアルゴリズムも開示している。それは、上記３ディジットから１０ビットへの変換アルゴリズム（大／小の１０進数に従って分離するもの）と同じ原理に基づいている。更に、米国特許第３，６１８，０４７号は、１１個の１０進ディジットが３ディジットの３グループ及び２ディジットの１グループに分解され得ることを提案した３及び２ディジット・アルゴリズムを結合しようとするものである。もう１つの例として、６４ビット空間が（５＊１０）＋（２＊７）として分割可能であり、１９個の１０進ディジットのコーディングを可能にす。同じ数の１０進ディジットが６４ビット空間を（６＊１０）＋（１＊４）として分割することによっても得られる。但し、その４ビット・コーディングは単に標準的な２進化１０進コーディングである。実際には、６４ビットにおいてエンコードされ得る完全な１０進ディジットの最大の可能な数は１９であり（それは、６４＊ｌｏｇ１０（２）＝１９．２７であるため、即ち、２０よりも小さいためであり）、従って、これらの方法は理論的には最適である。
【００２３】
しかし、このような異なるコーディング（及びデコーディング）パターンの結合は、チェン／ホーのアルゴリズムの主要な初期の魅力ある点の１つであった簡便性を含むものである。
【００２４】
【課題を解決するための手段】
従って、本発明は１０進ディジットを２進ビットに変換する方法を提供する。その方法は、
１個、２個、又は３個の１０進ディジットを受け取るステップと、
１個の１０進ディジットが存在する場合には最初の６個の２進ビットは０であり、２個の１０進ディジットが存在する場合には最初の３個の２進ビットが０であるというようなエンコード方式を使用して前記１０進ディジットを１０個の２進ビットにエンコードするステップと、
前記１０個の２進ビットを出力するステップと、
を含む。
【００２５】
上記のエンコード方式の使用は、任意の数の１０進ディジットをコード化するために単一の効率的な方式が使用されることを可能にする。１個、２個、又は３個の１０進ディジットを自動的にエンコードするために同じ方式が使用可能である。なお、更に大きい数の１０進ディジットは３個のグループ（及び１個又は２個の残り）に分解される。一般には、受け取られた１０進ディジットは２進化１０進数の形式のものであることに留意してほしい。
【００２６】
望ましい実施例では、３個よりも少ない１０進ディジットが受け取られる場合、これらは、３ディジット（又は、２進化１０進数入力が使用される場合には１２ビット）の整合した入力サイズを与えるために０でもってパッドされ得る。これは、エンコーディングが固定のハードウエアにおいて行われる場合には特に有用である。対照的に、そのようなパッディングは、そのコーディングがソフトウエアで、例えば、ルックアップ・テーブルを介して行われる場合には必要ないであろう。
【００２７】
本発明の望ましい実施例によれば、１０個の２進ビットの出力は一次インジケータ・フィールドを含んでいる。チェン／ホーのアルゴリズムのような従来技術の方式とは反対に、この一次インジケータ・フィールドは前記１０個の２進ビットの前に（即ち、最上位ビット値の位置に）配置されず、むしろそのビット・シ−ケンス内に配置される。下記の望ましいインプリメンテーションでは、一次インジケータ・フィールドは１０ビット・シーケンスにおける第７ビットである（これは、１個又は２個の１０進ディジットしかエンコードされない場合には０にならなければならないビット位置セットの外にそれがあることを意味することに留意してほしい）。
【００２８】
一次インジケータ・フィールドの目的は、３個の１０進ディジットがすべて小であるかどうかを表すことである。この場合、それが０−７の範囲にあれば小と見なされ、それが８又は９である（チェン／ホーの方式に類似している）場合には大と見なされる。
【００２９】
３個の１０進ディジットすべてが必ずしも小ではない場合、１０個の２進ビットには２ビットの二次インジケータ・フィールドが含まれる。このフィールドは、前記３個の１０進ディジットのうちの複数個が大であることを表すための第１の値、並びに前記３個の１０進ディジットのうちの１個だけが大である場合にそれらの１０進ディジットのどれが大であるかを表すための第２、第３、及び第４の値を有する。望ましい実施例では、その二次インジケータの２ビットは前記１０個の２進ビットの第８及び第９ビットを構成する（それらは、再び、１個又は２個の１０進ディジットしかエンコードされない場合に０にならなければならないビット位置セットの外である）。
【００３０】
２個以上の１０進ディジットが大である場合、２個の更なるビットの三次インジケータ・フィールドが１０個の２進出力ビットに設けられる。このフィールドは、前記１０進ディジットにおける３個のディジットすべてが大であることを表すための第１の値、並びに前記１０進ディジットのうちの１個だけが小である場合にそれら１０進ディジットのどれが小であるかを表すための第２、第３、及び第４の値を有する。望ましい実施例では、三次インジケータ・フィールドの２ビットは、前記１０個の２進ビットの第４及び第５ビットを構成する。
【００３１】
本発明は、更に、２進ビットを１０進ディジットに変換する（即ち、上記方向とは反対の方向における変換を行う）方法も提供する。これは、１０個の２進ビットを受け取るステップ、上述のエンコーディングとは反対の操作を行うことによって前記１０個の２進ビットを３個の１０進ディジットにデコードするステップ、及び前記３個の１０進ディジットを出力するステップを伴う。前記デコードするステップにおける第１の論理的ステップは、インジケータ・ビット（一次インジケータ・フィールド）の値を調べるためのものであることが望ましい。一般に、３個の１０進ディジットは２進化１０進数の形で出力される（再び、これはハードウエア実施例に対する事例であることが特に適している）。
【００３２】
本発明は、更に、上記の方法をインプリメントするためのコンピュータ・プログラムを提供する。そのようなプログラムは、ＣＤ−ＲＯＭ、ＤＶＤ、又はディスケットのような機械読み取り可能な記憶媒体の中にエンコードされたプログラム命令のセットを表すコンピュータ・プログラム製品として供給され得る。この場合、それらの命令は記憶媒体から読み取ることによってコンピュータ又は他のホスト装置にロードされ、その方法の処理をコンピュータ又はホスト装置に実行させる。そのような命令はコンピュータにプリロードされる（例えば、ＲＯＭ上にエンコードされる）ことが可能であり、或いは、インターネットのようなネットワーク、ローカル・エリア・ネットワーク、無線リンク、又は他の任意の適当な接続形式を介してコンピュータにダウンロードされることも可能であるということに留意してほしい。
【００３３】
本発明のエンコード方法に対応して、１０進ディジットを２進ビットに変換するためのシステムが更に提供される。そのシステムは、
１個、２個、又は３個の１０進ディジットを受け取るための手段と、
１個の１０進ディジットが存在する場合には最初の６個の２進ビットが０であり、２個の１０進ディジットが存在する場合には最初の３個の２進ビットが０であるというようなエンコード方式を使用して、前記３個の１０進ディジットを１０個の２進ビットにエンコードするための手段と、
前記１０個の２進ビットを出力するための手段と、
を含む。
【００３４】
本発明のデコード方法に対応して、２進ビットを１０進ディジットに変換するためのシステムが更に提供される。そのシステムは、
１０個の２進ビットを受け取るための手段と、
上述のエンコードとは反対の操作を行うことによって前記１０個の２進ビットを３個の１０進ディジットにデコードするための手段（前記デコードするための手段における第１の論理的ステップは前記１０個の２進ビットの前に配置されてないインジケータ・ビットの値を調べることである）と、
前記３個の１０進ディジットを出力するための手段と、
を含む。
【００３５】
【発明の実施の形態】
次に、本発明の望ましい実施例を単なる例として詳しく説明することにする。
【００３６】
本発明のコーディング方式は、表２に示されたビット・マッピングに基づいている。表２における表記法は表１において使用された表記法と同じであり、３個の２進化１０進ディジット（ａｂｃｄ）、（ｅｆｇｈ）、（ｉｊｋｌ）が１０ビットの出力ストリング（ｐｑｒｓｔｕｖｗｘｙ）にエンコードされる。
【００３７】
【表２】
0003588349.tif 000004
【００３８】
表１のエンコーディング方式では、１個又は２個の１０進ディジットからそれぞれ４個又は７個のビットへの圧縮は３ディジット・コーディングの右揃えされたサブセットとして得られる。これは、任意の数の１０進ディジットが効果的にエンコードされることを可能にする。単に０ビットでもってパッドすることによって、短い１０進数が長いフィールドに拡張され得る。
【００３９】
例えば、３８個の１０進ディジットは１２８個のビットにエンコードされ得る（３８＝１２＊３＋１＊２は符号のための１ビットを残して１２７ビットに対応する）。１つの望ましい実施例では、本発明のエンコーディングを使用して、３３ディジットの１０進数及び指数が１２８ビット・フィールドに記憶される（注意：とりわけ、ＣＯＢＯＬのような或る種の言語は３２ディジット計算を必要とするので、これを１２８ビット・レジスタに適合させる機能が特に有用である）。
【００４０】
表２のビット・マッピングに関してこれらの特性を維持する多くの変形が存在することは明らかであろう。次の３つの主要なカテゴリを考察する。
（ａ）冗長ビット：１０ビットが１０２４を表すことができ、我々が３個の１０進ディジットに対して１０００個の可能性しか必要としないものと仮定すると、事実、或る２進の組み合わせは冗長であり、従って、交換可能である。例えば、その表の最終行では、ビットａ及びｂの値は勝手に０にセットされたが、コードに影響を与えることなく任意の値を持つことが可能である（その最終行は、３個の１０進ディジットすべてが大、即ち、８又は９であるという状況にしか関係ないので、ここでは先行の０は必要ない）。
（ｂ）ビット反転：或るビット・マッピングを反転することは明らかにあり得ることである。例えば、ビットｙは、常に又は選択された行のみ対して、ダイレクト・マッピングとしてではなくビットｌの反転となり得る。同様に、インジケータ・フィールドの或るコンポーネントは、一次インジケータ・フィールドｖ又は二次インジケータ・ビットｗ及びｘ（これらは１つのペアとして反転されなければならないであろう）のような示された値からも常に反転可能である。ビットｖ、ｗ及びｘはすべて最後の４位置内にあるので、３個よりも少ない１０進値がマップされ場合、それらの値は先行の０の部分にはならないであろうということに留意してほしい。
（ｃ）ビット再配置：表２の第１行を考察する。３個よりも小さい１０進ディジットに対して先行の０にインパクトを与えることなくビットｗ、ｘ、及びｙのいずれにおいてもビットｊ、ｋ、及びｌを記憶することが可能であることは明らかであろう（例えば、ｊ、ｋ、及びｌがそれぞれビットｘ、ｗ、及びｙにマップする）。更に、或る種の結合ロジックを使用した更に複雑なビット・マッピングも使用可能である。
【００４１】
従って、上記の原理に基づいて、及び可能性のある異なるカテゴリの変形を結合して又は他の変形を採用して、当業者は、１個、２個、又は３個の１０進ディジットを同時に処理する能力を持った種々の別のマッピングを表２から発展させることができるであろう。換言すれば、表２に示された特定のコーディング方式は独特のものではなく、本発明を説明するだけのものである。
【００４２】
それにも関わらず、表２のマッピングは、それが２つの更なる利点を有するので、望ましい実施例において使用される。第１に、そのビット・マッピングは比較的簡単であり（常にｙに直接にマップするｌのように）、それによってハードウエアの複雑さ及びコストを縮小している。第２に、表２の最初の２行だけを利用する０から７９までのすべての数が、１２ビットから１０ビットになるように先行の０を単に落とすことによって、効果的にそれらの２進化１０進値から直接マップする（対照的に、チェン／ホーの方法は、５までの数に対してはそのような直接的なマッピングを行うだけである）。従って、小さい数（ごく一般的となる傾向がある）に関する変換は特に簡単に行われ得る。
【００４３】
表２のエンコーディングから２進化１０進数にマップ・バックするための対応するデコード方式が表３に示される（なお、この表における”．”は無関係を意味する）。
【００４４】
【表３】
0003588349.tif 000005
【００４５】
上記表２のマッピングに従って出力ビットを取り出すための論理演算は次のように表される（なお、その論理演算では、”＆”＝ＡＮＤ、”｜”＝ＯＲ、及び”−”＝ＮＯＴである）。
【００４６】
ｐ＝（ｂ  ＆  −ａ）｜（ｊ  ＆  ａ  ＆  −ｉ）｜（ｆ  ＆  ａ  ＆  −ｅ  ＆  ｉ）
ｑ＝（ｃ  ＆  −ａ）｜（ｋ  ＆  ａ  ＆  −ｉ）｜（ｇ  ＆  ａ  ＆  −ｅ  ＆  ｉ）
ｒ＝ｄ
ｓ＝（ｆ  ＆  −ｅ  ＆  −（ａ  ＆  ｉ））｜（ｊ  ＆（−ａ  ＆  ｅ  ＆  −ｉ））｜（ｅ  ＆  ｉ）
ｔ＝（ｇ  ＆  −ｅ  ＆  −（ａ  ＆  ｉ））｜（ｋ  ＆（−ａ  ＆  ｅ  ＆  −ｉ））｜（ａ  ＆  ｉ）
ｕ＝ｈ
ｖ＝ａ  ｜  ｅ  ｜  ｉ
ｗ＝ａ  ｜（ｅ  ＆  ｉ）｜（ｊ  ＆  −ｅ  ＆  −ｉ）
ｘ＝ｅ  ｜（ａ  ＆  ｉ）｜（ｋ  ＆  −ａ  ＆  −ｉ）
ｙ＝ｌ
【００４７】
１０個の２進ビット（ｐｑｒｓｔｕｖｗｘｙ）から標準的な２進化１０進数（ａｂｃｄ）、（ｅｆｇｈ）、（ｉｊｋｌ）に変換するためのデコード操作、即ち、表３のマッピングは次のように遂行され得る。
【００４８】
ａ＝（ｖ  ＆  ｗ）  ＆  （−ｘ｜−ｓ｜（ｓ  ＆  ｔ））
ｂ＝ｐ  ＆（−ｖ｜−ｗ（ｖ  ＆  ｗ  ＆  ｘ  ＆  ｓ  ＆  −ｔ））
ｃ＝ｑ  ＆（−ｖ｜−ｗ（ｖ  ＆  ｗ  ＆  ｘ  ＆  ｓ  ＆  −ｔ））
ｄ＝ｒ
ｅ＝ｖ  ＆（（−ｗ  ＆  ｘ）｜（ｗ  ＆  ｘ  ＆（ｓ  ｜  −ｔ）））
ｆ＝（ｓ  ＆（−ｖ  ｜  （ｖ  ＆  −ｘ）））｜（ｐ  ＆  ｖ  ＆  ｗ  ＆  ｘ  ＆  −ｓ  ＆  ｔ）
ｇ＝（ｔ  ＆（−ｖ  ｜  （ｖ  ＆  −ｘ）））｜（ｑ  ＆  ｖ  ＆  ｗ  ＆  ｘ  ＆  −ｓ  ＆  ｔ）
ｈ＝ｕ
ｉ＝ｖ  ＆（（−ｗ  ＆  −ｘ）｜（ｗ  ＆  ｘ  ＆（ｓ  ｜  ｔ）））
ｊ＝（ｗ  ＆  −ｖ）｜（ｓ  ＆  ｖ  ＆  −ｗ  ＆  ｘ）｜（ｐ  ＆  ｖ  ＆  ｗ  ＆  （−ｘ｜（−ｓ  ＆  −ｔ）））
ｋ＝（ｘ  ＆  −ｖ）｜（ｔ  ＆  ｖ  ＆  −ｗ  ＆  ｘ）｜（ｑ  ＆  ｖ  ＆  ｗ  ＆  （−ｘ｜（−ｓ  ＆  −ｔ）））
ｌ＝ｙ
【００４９】
エンコード及びデコードするためのこれらの式が標準的なブール技法を使用して種々の論理等価物に改変可能であることは明らかであろう。また、それらの式が、指定された入力／出力と接続された適切なゲートを含むハードウエア・エンコーダ／デコーダをそれぞれ効果的に定義することも明らかであろう。ソフトウエア・インプリメンテーションに対しては、上記のマッピングからルックアップ・テーブル（例えば、ハッシュ・テーブル）を生成することがより速いかもしれない。このルックアップ・テーブルが明らかに１０進コーディングから２進コーディングに直接に（中間ステップとして２進化１０進数を使用することなく）変わり得ることに留意してほしい。原理的には、これを行うハードウエアを作ることも可能であるが、これは１０進数をそのまま処理するように複雑なハードウエアを設計することを考慮すればやりがいのあることではないであろう（換言すれば、２進化１０進数への中間的変換は、一般には、ハードウエア・インプリメンテーションにとって有益なことであろう）。例えば、１０進数から２進化１０進数へのソフトウエア変換及びしかる後の表２において詳しい圧縮によるハードウエア変換のようなソフトウエア／ハードウエア結合インプリメンテーションが環境次第では望ましいかもしれないことも明らかであろう。
【００５０】
本発明を使用する１つの例はデータベースにおけるものであり、その場合、データベースは１０進ディジットをそれらの真正な形式で保持するように設計され得る（特に、これらが、時には、単なる数量ではなく口座番号等を表すことがあり得るということを心に留めておいてほしい）。ここではエンコーディングはデータを、それの１０進数の性質を保ちながら効率的に（即ち、できるだけ小さい記憶スペースを使用して）保存又は記憶するように使用され得る。これらの環境においては、エンコーディングはデータベースがデータ・ファイルを記憶のために書き込む時に遂行され、デコーディングはデータベースが記憶されたデータ・ファイルを処理のために読み出す時に遂行される。
【００５１】
処理するためのデコーディングはソフトウエアにおいて、例えば、Ｃルーチンのライブラリによって又は適当なハードウエア構造によって遂行され得る。一般には、処理の後、数値はその後の記憶のために、本願において説明したように、エンコードされるであろう。ハードウエアが使用される場合、デコードされた数値は特定の計算操作を行うために必要とされるだけである。換言すれば、圧縮された形式が記憶装置からレジスタに読み出され、関連の計算操作（例えば、加算）のためにデコードされる必要があるだけである。この操作の結果は、レジスタへのその結果の書き戻し動作の部分で再エンコードされ得る。
【００５２】
本発明を使用するもう１つの例は、機械に無関係に１０進数をエンコードすることである。これは、そのような数値を機械相互間で転送するために使用され得る。わずかに類似したアプリケーションがインターネット又はワールドワイド・ウェブにおけるものであろう。その場合、種々のクライアントの装置において処理を行うことが望ましい。一例は、ｈｔｍｌページの一部分として含まれた１０進数をＸＭＬ形式で処理することであろう。
【００５３】
本発明のコーディング方式が非常に広範囲の装置に適用可能であることに留意してほしい。これは、パームトップからパーソナル・コンピュータ、ワークステーション、サーバ及びメインフレームまでのサイズ範囲にあるコンピュータのみならず、ＰＯＳ端末、カー・ナビゲーション・システム、パーソナル・ディジタル・アシスタントのような１０進計算を行いたい他の装置（一般には、マイクロプロセッサ又はＤＳＰベースのもの）を含む。また、本発明に従ってエンコーディング又はデコーディング（両方ではない）を行う特殊な装置又はアプリケーションがあり得ることにも留意してほしい。
【００５４】
従って、要約すると、本願において開示されたコーディング方式は広範囲のアプリケーションを有し、ハードウエア、ソフトウエア、又はその２つの組み合わせにおいてインプリメントされ得る。エンコーディングのための望ましいフォーマットは表２に示されているが、これが単に例示的なものに過ぎないことは明らかであろう。当業者は、特許請求の範囲において定義された本発明の技術的範囲内にある上記の適正なインプリメンテーションに対する種々の修正を思い付くことであろう。
【００５５】
まとめとして、本発明の構成に関して以下の事項を開示する。
【００５６】
（１）１０進ディジットを２進ビットに変換する方法にして、
１個、２個又は３個の１０進ディジットを受け取るステップと、
１個の１０進ディジットが存在する場合には最初の６個の２進ビットが０であり、２個の１０進ディジットが存在する場合には最初の３個の２進ビットが０であるというようなエンコーディング方式を使用して前記１０進ディジットを１０個の２進ビットにエンコードするステップと、、
前記１０個の２進ビットを出力するステップと、
を含む方法。
（２）前記エンコードするステップの前に、１個の１０進ディジットが受け取られた場合には該受け取られた１０進ディジットを２個の０でもってパッドするステップと、
前記エンコードするステップの前に、２個の１０進ディジットが受け取られた場合には該受け取られた１０進ディジットを１個の０でもってパッドするステップと、
を更に含む、上記（１）に記載の方法。
（３）前記１０個の２進ビットの出力は一次インジケータ・フィールドを含み、該一次インジケータ・フィールドは前記１０個の２進ビットのうちの第１ビットではない、上記（１）又は（２）に記載の方法。
（４）前記一次インジケータ・フィールドは前記１０個の２進ビットのうちの最後のビットではない、上記（３）に記載の方法。
（５）前記一次インジケータ・フィールドは前記１０個の２進ビットのうちの第７ビットを含む、上記（４）に記載の方法。
（６）前記一次インジケータ・フィールドは前記３個の１０進ディジットがすべて小であるかどうかを表す、上記（３）乃至（５）のいずれかに記載の方法。
（７）１０進ディジットが０−７の範囲にある場合には該１０進ディジットは小であると見なされ、１０進ディジットが８又は９である場合には該１０進ディジットは大であると見なされる、上記（６）に記載の方法。
（８）前記３個の１０進ディジットが小ではないディジットを含む場合、前記１０個の２進ビットは二次インジケータ・フィールドを含む、上記（７）に記載の方法。
（９）前記二次インジケータ・フィールドは２個のビットを含む、上記（８）に記載の方法。
（１０）前記二次インジケータ・フィールドは前記１０進ディジットのうちの複数のディジットが大であることを表すための第１の値及び前記１０進ディジットのうちの１個のディジットだけが大である場合に前記３個の１０進ディジットのうちのどれが大であるかを表すための第２、第３及び第４の値を有する、上記（９）に記載の方法。
（１１）前記二次インジケータ・フィールドの前記２個のビットは前記１０個の２進ビットのうちの第８及び第９ビットを含む、上記（８）又は（９）に記載の方法。
（１２）前記１０進ディジットのうちの２個以上のディジットが大である場合、前記１０個の２進ビットは三次インジケータ・フィールドを含む、上記（８）乃至（１１）のいずれかに記載の方法。
（１３）前記三次インジケータ・フィールドは２個のビットを含む、上記（１２）に記載の方法。
（１４）前記三次インジケータ・フィールドは前記３個の１０進ディジットすべてが大であることを表すための第１の値及び前記１０進ディジットのうちの１個のディジットだけが小である場合に前記３個の１０進ディジットのうちのどれが小であるかを表すための第２、第３及び第４の値を有する、上記（１３）に記載の方法。
（１５）前記三次インジケータ・フィールドの前記２個のビットは前記１０個の２進ビットの第４及び第５ビットを含む、上記（１３又は１４）に記載の方法。
（１６）前記１０個の２進ビットは０−７９の範囲におけるすべての１０進数に対して前記１０進ディジットの２進化１０進コーディングに対応する、上記（１）乃至（１５）のいずれかに記載の方法。
（１７）前記受け取られた１０進ディジットは２進化１０進数の形式である、上記（１）乃至（１６）のいずれかに記載の方法。
（１８）２進ビットを１０進ディジットに変換する方法にして、
１０個の２進ビットを受け取るステップと、
上記（１）乃至（１７）のいずれかにおけるエンコードするステップの反対の操作を行うことによって前記１０個の２進ビットを３個の１０進ディジットにデコードするステップと、
前記３個の１０進ディジットを出力するステップと、
を含む方法。
（１９）２進ビットを１０進ディジットに変換する方法にして、
１０個の２進ビットを受け取るステップと、
前記１０個の２進ビットを３個の１０進ディジットにデコードするステップであって、前記１０個の２進ビットの前に置かれていないインジケータ・ビットの値を調べる第１の論理的ステップを含むステップと、
前記３個の１０進ディジットを出力するステップと、
を含む方法。
（２０）前記インジケータ・ビットは前記１０個の２進ビットの終わりには置かれていない、上記（１９）に記載の方法。
（２１）前記インジケータ・ビットは前記１０個の２進ビットのうちの第７ビットである、上記（２０）に記載の方法。
（２２）前記３個の１０進ディジットは２進化１０進数の形式である、上記（１８）乃至（２１）のいずれかに記載の方法。
（２３）３個までの１０進ディジットを１０個の２進ビットにエンコードする方法にして、前記エンコードは実質的に表２におけるマッピングに従って行われる方法。
（２４）上記（１）至（２３）のいずれかの方法をコンピュータに実行させるためのコンピュータ・プログラム。
（２５）１０進ディジットを２進ビットに変換するためのシステムにして、
１個、２個、又は３個の１０進ディジットを受け取るための手段と、
１個の１０進ディジットが存在する場合には最初の６個の２進ビットが０であり、２個の１０進ディジットが存在する場合には最初の３個の２進ビットが０であるというようなエンコーディング方式を使用して前記１０進ディジットを１０個の２進ビットにエンコードするための手段と、
前記１０個の２進ビットを出力するための手段と、
を含むシステム。
（２６）前記エンコードする前に、１個の１０進ディジットが受け取られた場合には該受け取られた１０進ディジットを２個の０でもってパッドするための手段と、
前記エンコードする前に、２個の１０進ディジットが受け取られた場合には該受け取られた１０進ディジットを１個の０でもってパッドするための手段と、
を更に含む、上記（２５）に記載のシステム。
（２７）前記１０個の２進ビットの出力は一次インジケータ・フィールドを含み、該一次インジケータ・フィールドは前記１０個の２進ビットのうちの第１ビットではない、上記（２５）又は（２６）に記載のシステム。
（２８）前記一次インジケータ・フィールドは前記１０個の２進ビットのうちの最後のビットではない、上記（２７）に記載のシステム。
（２９）前記一次インジケータ・フィールドは前記１０個の２進ビットのうちの第７ビットを含む、上記（２８）に記載のシステム。
（３０）前記一次インジケータ・フィールドは前記３個の１０進ディジットがすべて小であるかどうかを表す、上記（２７）乃至（２９）のいずれかに記載のシステム。
（３１）１０進ディジットが０−７の範囲にある場合には該１０進ディジットは小であると見なされ、１０進ディジットが８又は９である場合には該１０進ディジットは大であると見なされる、上記（３０）に記載のシステム。
（３２）前記３個の１０進ディジットが小ではないディジットを含む場合、前記１０個の２進ビットは二次インジケータ・フィールドを含む、上記（３１）に記載のシステム。
（３３）前記二次インジケータ・フィールドは２個のビットを含む、上記（２２）に記載のシステム。
（３４）前記二次インジケータ・フィールドは前記１０進ディジットのうちの複数のディジットが大であることを表すための第１の値及び前記１０進ディジットのうちの１個のディジットだけが大である場合に前記３個の１０進ディジットのうちのどれが大であるかを表すための第２、第３及び第４の値を有する、上記（３３）に記載のシステム。
（３５）前記二次インジケータ・フィールドの前記２個のビットは前記１０個の２進ビットのうちの第８及び第９ビットを含む、上記（３２）又は（３３）に記載のシステム。
（３６）前記１０進ディジットのうちの２個以上のディジットが大である場合、前記１０個の２進ビットは三次インジケータ・フィールドを含む、上記（３２）乃至（３５）のいずれかに記載のシステム。
（３７）前記三次インジケータ・フィールドは２個のビットを含む、上記（３６）に記載のシステム。
（３８）前記三次インジケータ・フィールドは前記３個の１０進ディジットすべてが大であることを表すための第１の値及び前記１０進ディジットのうちの１個のディジットだけが小である場合に前記３個の１０進ディジットのうちのどれが小であるかを表すための第２、第３及び第４の値を有する、上記（３７）に記載のシステム。
（３９）前記三次インジケータ・フィールドの前記２個のビットは前記１０個の２進ビットの第４及び第５ビットを含む、上記（３７）は（３８）に記載のシステム。
（４０）前記１０個の２進ビットは０−７９の範囲におけるすべての１０進数に対して前記１０進ディジットの２進化１０進コーディングに対応する、上記（２５）乃至（３９）のいずれかに記載のシステム。
（４１）前記受け取られた１０進ディジットは２進化１０進数の形式である、上記（２５）乃至（４０）のいずれかに記載のシステム。
（４２）２進ビットを１０進ディジットに変換するためのシステムにして、
１０個の２進ビットを受け取るための手段と、
上記（２５）乃至（４１）のいずれかにおけるエンコードするステップの反対の操作を行うことによって前記１０個の２進ビットを３個の１０進ディジットにデコードするための手段と、
前記３個の１０進ディジットを出力するための手段と、
を含むシステム。
（４３）２進ビットを１０進ディジットに変換するためのシステムにして、
１０個の２進ビットを受け取るための手段と、
前記１０個の２進ビットを３個の１０進ディジットにデコードするための手段であって、前記１０個の２進ビットの前に置かれていないインジケータ・ビットの値を調べる第１の論理的手段を含む手段と、
前記３個の１０進ディジットを出力するための手段と、
を含むシステム。
（４４）前記インジケータ・ビットは前記１０個の２進ビットの終わりには置かれていない、上記（４３）に記載のシステム。
（４５）前記インジケータ・ビットは前記１０個の２進ビットのうちの第７ビットである、上記（４４）に記載のシステム。
（４６）前記３個の１０進ディジットは２進化１０進数の形式である、上記（４２乃至４５のいずれか）に記載のシステム。
（４７）  ３個までの１０進ディジットを１０個の２進ビットにエンコードするシステムにして、前記エンコードは実質的に表２におけるマッピングに従って行われるシステム。