0

私はコンピューターサイエンスのコースを学んでいますが、これらの定義を読むと理解できます。しかし、2 つのプレゼンテーションの異なる目的とその理由はわかりません。ここで、私の本が述べた目的の簡単な説明を以下に示します。

Zone decimal : hightly compatible with text data.
Packed decimal : faster computing speed.

私が知りたいことは次のとおりです。

1) ゾーン 10 進数表示では、すべての桁を複製するゾーン セクションがあります。なんで ?これは目的ではありません:(

2) ゾーン 10 進数がテキスト データと互換性があると彼らが言う理由と、パック 10 進数の方が高速である理由。

ありがとう :)

4

3 に答える 3

2

自然環境での「ZonedDecimal」は、EBCDIC文字セットと互換性があることを意味します。

ASCIIは、数値をx'3x'-x'39'として表し、文字「0」から「9」として表示されます。

EBCDIC文字セット(ホレリスのパンチカードに由来)は、x'F0'が文字"0'として表示され、x'F9'が文字'9'として表示される、類似しているが異なるスキームを使用します。

パンチカードの長さは80文字に固定されており、多くの場合、これらの文字のうち10文字または12文字が、レコードタイプ識別子とシーケンス番号で使い果たされていました(大量のカードを床に落とした場合は非常に重要です)。そのため、スペースは貴重でした。各数字の横に「+」または「-」文字を入力するのではなく、カードのトップビットの近くにある「オーバーパンチ」の余分な穴を使用して正または負の数字を表し、バイトを節約しました。

これらのオーバーパンチされた文字は、通常、数字の最後の桁に、-0から-9の場合はx "D0'からx'D9"、+0から+9の場合はx'C0'からx'C9'としてEBCDICに含まれていました。

したがって、「ZonedDecimal」形式です。各バイトの最初の4ビットはゾーンであり、-42までの「数値」の次の4ビットはx'F4D2'としてエンコードされました。コンピュータはこのフォーマットでは何もできなかったので、これは他の何よりも慣例です。したがって、計算を行う前に、「パック」形式にエンコードする必要がありました。これは非常に簡単です。s'X'F4D2->x'042D'は、ほとんどの場合、最後のゾーンを取得し、各バイトから「数値」4ビットを抽出して、バイナリに変換できる場合です。

IBMメインフレームが設計されたとき、ユーザーの最大のグループは銀行、保険会社、公益事業会社でした。そこでの処理の大部分はこのパターンに従いました。

  • パンチカードを読んでください。
  • テープレコードを読み取ります。
  • バランスをとるために毎月の支払いを追加します
  • 新しいバランスをテープに保存する
  • ニューバランスを印刷する

ほとんどの計算には通貨額が含まれ、ほとんどの結果はすぐに表示されました。マシンがパックされた10進数値に対して直接算術演算を実行できれば、いくつかの高価な「2進数に変換」および「10進数に変換」命令を回避できることが明らかになりました。ボーナスとして、小数点を正しい位置に配置し、小数点の丸めを簡単に実行できるようになりました。そのため、ネイティブのパック10進数命令(ゼロ、加算、減算、乗算、除算、シフト、丸めなど)の実装に多大な労力が費やされました。

それ以来、これはIBMメインフレームで推奨される通貨形式です。

長年、他のプラットフォームの開発者は、そのような古風な形式を使用するためにメインフレーマーに軽蔑を注ぎ、つい最近、会計士や収税人が期待する固定小数点演算を行うことがいかに難しいかを理解し始めました。Mike_Cowlishawやその他の努力のおかげで、世界中が由緒あるIBM 360に追いつき、Javaプログラマーは古いパック10進数形式のバリエーションに基づくBigDecimalライブラリを使用して消費税を正しく計算できるようになりました。

于 2012-05-11T04:04:32.540 に答える
2

まず、どこで CS を学んでいますか? これらの用語は 1960 年代のもので、より一般的な名前は BCD ( Binary Coded Decimal )です。

ゾーン 10 進数では、各桁に 1 バイト全体が使用されます。これは、数値をテキストのように出力できることを意味します (各「文字」は 0 ~ 9 の数字を格納します) が、10 桁しかなく、1 バイトで 256 の異なる値を保持できるため、これは少し無駄です。

パック 10 進数は、4 ビットで 16 の異なる値を格納できるという事実を利用しています。したがって、1 バイトに 2 桁 (上位 4 ビットと下位 4 ビット) を格納できます。容量の半分しか使用しないため、これはまだ少し無駄です。しかし、シフト操作とマスク操作だけで 2 桁を抽出するのは非常に簡単です。

最近 BCD が見られる唯一の場所は、マイクロプロセッサをまったく使用せずに数字を読み取り/x-mit したい低レベルのハードウェアです。トランジスタだけでBCDカウンターを作るのは簡単です

ただし、数学を実行したい場合は、紙のように各桁で長い乗算を行うか、通常の int に変換してから戻す必要があります

于 2012-05-10T17:18:20.170 に答える
2

これらの表現は両方とも、C によって直接サポートされておらず、したがってすべてのシステムが Unix から派生したため、支持されなくなりました。

パック 10 進数には 2 つの点で利点があります。使用するスペースが少ないため、バスからプロセッサにすばやく移行できることと、多くの CISC 命令セットに算術専用の命令があることです。http://en.wikipedia.org/wiki/Packed_decimal#Packed_BCDから引用するには:

パック BCD [2 進化 10 進数] は、COBOL プログラミング言語で "COMPUTATIONAL-3" (他の多くのコンパイラ ベンダーが採用している IBM 拡張機能) または "PACKED-DECIMAL" (1985 COBOL 標準の一部) データ型としてサポートされています。IBM System/360 およびそれ以降の互換性のあるメインフレームに加えて、パックされた BCD は Digital Equipment Corporation のオリジナルの VAX プロセッサのネイティブ命令セットに実装され、メインフレームの Burroughs Corporation Medium Systems ライン (1950 年代の Electrodata 200 から派生) のネイティブ フォーマットでした。シリーズ)。

ゾーン 10 進数 (http://en.wikipedia.org/wiki/Zoned_decimal#Zoned_decimal) は、パンチ カードの文字とメモリ内の文字表現との間の簡単なマッピングを持っています。これはおそらく、「テキスト データとの互換性が高い」という教科書の主張を説明しています。 " ウィキペディアの記事が示唆しているように、これは IBM メインフレーム サークルでよく使用される用語です。ミニでは、単純な古い 10 進数、PIC 9 データと呼ぶ傾向がありました。

于 2012-05-10T17:27:00.020 に答える