2017-02-14 16 views
0

私は、コンピュータがBCDからExcess-3に変換するためにバイナリコードコンバータを必要とするのはどういうことかと思いました。これが必要な理由は、コンピュータがバイナリコードの1つの形式を使用することはできません。なぜバイナリコードコンバータが必要ですか?

+1

https://xkcd.com/927/? – CollinD

+0

それは本当にいいですね、それ?新しいバイナリコーディングシステムが開発されると、ハードウェアのすべての部分とソフトウェアのすべての部分を交換する必要があります。 BCDは、変換コストを避けることが最も重要な時代から生じています。残念ながら、それは算術単位で実装するのは苦痛です...等 – dhke

+0

バイナリは単なる1sと0sの文字列以上のものです。 – csmckelvey

答えて

0

新しい形式の「より良い」形式が使用されても、古い形式のバイナリ形式もそのまま残ります。たとえば、レガシーハードウェアがまだ使用されており、レガシーコードを実行しているため、書き換えにコストがかかります。単語の長さは、コンピューティングの初期の年では標準化されていなかったので、5から12ビットの長さの単語を持つマシンは当然、同じ数字を表すために異なるスキームを必要とする。

場合によっては、自己互換性(つまり、会社の古い製品)の理由で特定の表現を使用し続けている場合や、習慣が習慣的または「会社の方法」であるために、たとえば、モトローラとPowerPCチップのビッグエンディアン表現とIntelチップのリトルエンディアン表現の使用。 (多くのPowerPCプロセッサは、メーカーが一般的に1つの製品でしか使用しない場合でも、両方のタイプのエンディアンをサポートしています)。

前の段落は実際にバイトオーダーに触れていますが、交換。

BCDでも、それを格納する方法はたくさんあります(たとえば、1語につき1 BCD桁、または1バイトあたり2 BCD桁)。 IBMはzoned decimalと呼ばれる巧妙な表現を持っています。ここでは高次ニブルに値を格納し、低次ニブルのBCD値と組み合わせて値を表すEBCDIC文字を作成します。これは、ASCIIの代わりにEBCDIC(2の補数または符号なしバイナリの代わりにBCDを使用)を使用して文字を表すという概念に結びついている場合には非常に便利です。

接線関係:1960年代のIBMメインフレームは、算術演算を実行する前にBCDをqui-binaryと呼ばれる中間形式に変換してから、結果をBCDに変換し直しました。これはRube Goldbergによるものですが、リンクされた記事によると、中間形式はエラー検出のメリットをもたらします。

IBMシステム/ 360(おそらくは新しいマシンの束)は、BCDと純粋なバイナリ表現の両方をサポートしていますが、IBMの命名規則に注意する必要があります—古いIBMerはBCDを "純粋なバイナリ(符号なし、2の補数、その他)を「バイナリコード付き16進数」と呼びます。これは多くの柔軟性を提供します。いくつかのデータは当然のようにある形式で最もよく表現され、あるデータは他の形式で表現され、機械は形式間で便利に変換するための命令を提供する。

浮動小数点演算の場合、バイナリ浮動小数点では正確に表現できない値がいくつかありますが、BCDまたは同様の表現を使用できます。たとえば、数値0.1には正確な2進浮動小数点がありません。これは、BCDと固定小数点演算が$ 3.51のようなものを正確に表現する必要がある通貨の金額を表すような場合に優先され、浮動小数点エラーが追加されないようにする理由です。

対象となるアプリケーションは重要です。任意精度の算術演算では、CPUの固定幅レジスタ(JavaのBigDecimalクラスなど)とは異なる表現方法が必要です。多くの言語では、任意の精度(たとえば、Scheme、Haskell)がサポートされていますが、基本精度は任意です。私は正直なところ、任意の精度、BCDタイプのスキーム、またはより高密度の純粋なバイナリ表現では何が望ましいか分かりません。JavaのBigDecimalの場合、バイナリ浮動小数点からBigDecimalへの変換は、最初に文字列—に変換することで最も効果的です。このような変換は潜在的に非効率なので、事前にfloatまたはdoubleが十分かどうかを事前に知る必要があります。あなたは本当に任意の精度を必要とします。

別正接:グルービー、JVM言語は、静かBigDecimal値としてコード内のすべての浮動小数点数値リテラルを扱い、float又はdoubleに優先してBigDecimal算術を使用します。これは、Groovyが保険業界で非常に人気がある理由の1つです。

tl; dr単精度の数値データ型はありません。このままであれば(おそらく、宇宙の熱死)、表現の間で変換する必要があります。

関連する問題