18


3

.NET Decimalのバイナリ表現

ちょっとすべて、簡単な質問:.NETの `decimal`型はメモリ内のバイナリでどのように表されますか?

浮動小数点数がどのように格納されているか、したがってその不正確さの理由は誰でも知っていますが、以下を除いて「10進数」に関する情報は見つかりません。

  1. 明らかに浮動小数点数よりも正確

  2. 128ビットのメモリを使用

  3. 2 ^ 96 +符号範囲

  4. 28(場合によっては29?)数字の有効数字の合計

これを理解する方法はありますか? 私のコンピューター科学者は答えを求めており、1時間の試みの研究の後、それを見つけることができません。 無駄なビットがたくさんあるか、頭の中でこの間違いを描いているようです。 誰かがこれに光を当てることができますか? ありがとう。

1 Answer


35


必要な情報については、http://msdn.microsoft.com/en-us/library/system.decimal.getbits.aspx [Decimal.GetBits]を参照してください。

基本的には、仮数としての96ビット整数、プラス符号ビット、および右にシフトする_decimal_桁数を示す指数です。

したがって、3.261を表すには、仮数3261、符号ビット0(つまり、 正)、および指数3。 10進数は(意図的に)正規化されていないため、たとえば、仮数32610と指数4を使用して3.2610を表すこともできます。

decimal floating pointの記事に詳細情報があります。