私は、コンピュータがBCDからExcess-3に変換するためにバイナリコードコンバータを必要とするのはどういうことかと思いました。これが必要な理由は、コンピュータがバイナリコードの1つの形式を使用することはできません。なぜバイナリコードコンバータが必要ですか?
答えて
新しい形式の「より良い」形式が使用されても、古い形式のバイナリ形式もそのまま残ります。たとえば、レガシーハードウェアがまだ使用されており、レガシーコードを実行しているため、書き換えにコストがかかります。単語の長さは、コンピューティングの初期の年では標準化されていなかったので、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単精度の数値データ型はありません。このままであれば(おそらく、宇宙の熱死)、表現の間で変換する必要があります。
- 1. なぜNotificationCompatが必要ですか?
- 2. なぜServer.HtmlEncodeが必要ですか?
- 3. なぜinstantiateViewContollerが必要ですか?
- 4. なぜDataBind()メソッドが必要ですか?
- 5. なぜHadoop KMSが必要ですか?
- 6. なぜReaderLockが必要ですか?
- 7. なぜコンテキストリダクションが必要ですか?
- 8. なぜsession_ destroy()が必要ですか?
- 9. なぜContinueWithメソッドが必要ですか?
- 10. なぜweb.debug.configが必要ですか?
- 11. なぜトークンスキームが必要ですか?
- 12. なぜasyncio.coroutineデコレータが必要ですか?
- 13. なぜcmakeが必要ですか?
- 14. バッシュプログラミング、なぜバックスラッシュが必要ですか?
- 15. なぜ[basic.scope.class]/2が必要ですか?
- 16. なぜlvalueが必要ですか?
- 17. なぜFLAGSが必要ですか?
- 18. なぜng-clickが必要ですか?
- 19. onelogin:なぜRequestedAuthnContextが必要ですか?
- 20. なぜHyper-Vが必要ですか?
- 21. なぜnp.squeeze()が必要ですか?
- 22. なぜoffsetofマクロが必要ですか?
- 23. なぜBuffer.isBufferメソッドが必要ですか?
- 24. なぜListIteratorが必要ですか?
- 25. なぜPDFファイルにLOG4JとSLF4Jが必要ですか?なぜ.Docファイルには必要ないのですか?
- 26. なぜ必要なのですか$ = jQuery
- 27. Typescriptなぜrequirejsが必要なのか
- 28. リポジトリパターン - なぜInterfacesが必要なのか?
- 29. なぜ私は "org.apache.derby.jdbc.ClientDriver"が必要です
- 30. なぜkarma-test-shim.jsが必要です
https://xkcd.com/927/? – CollinD
それは本当にいいですね、それ?新しいバイナリコーディングシステムが開発されると、ハードウェアのすべての部分とソフトウェアのすべての部分を交換する必要があります。 BCDは、変換コストを避けることが最も重要な時代から生じています。残念ながら、それは算術単位で実装するのは苦痛です...等 – dhke
バイナリは単なる1sと0sの文字列以上のものです。 – csmckelvey