【问题标题】:Why doesn't the decimal class use the remaining 26 bits?为什么十进制类不使用剩余的 26 位?
【发布时间】:2014-06-21 21:42:53
【问题描述】:

十进制类使用 96 位作为整数部分,1 位用于符号,5 位用于比例因子。 26位未使用,最大值为7.9e28,因为最大指数为28。

使用其他 26 位,精度会更高。这种实施选择的原因是什么?

【问题讨论】:

  • 23 位,而不是 26 位。请参阅上一个问题的 this answer from Eric Lippert 的最后一句话。
  • 它早在 .NET 之前就已经存在了。至少 VB4 中的 OLE 自动化,可能会更进一步,其中涉及 Excel 或 Lotus 123 的非零几率。在内部 System.Currency 类型中仍然有些可见。可以肯定的是,16 位未使用的位用于存储货币种类,其余 7 位用于对齐填充。这一切都消失在时间的迷雾中,不可能准确。
  • @HansPassant 你能把它作为答案发布吗?

标签: c# decimal


【解决方案1】:

您可能会发现这篇文章很有用:

http://csharpindepth.com/articles/general/decimal.aspx

128 是 4 x 32。大多数 CPU 都有 32(或 64)位寄存器和 ALU,因此任何可以被 32 整除的东西都将更容易操作和存储等。

【讨论】:

  • 确实如此,但是该类型可以使用更少的尾数位并能够容纳三个单词,或者使用更多的尾数位并填写 128。实际上,我本来希望已经看到将是一个 128 位定点类型,它存储为 256 的 96 位有符号整数和万亿分之一的 32 位无符号数(0.01 的值将存储为 2/256 + 78,125,000/ 1,000,000,000)。乘法和除法运算需要乘以和除以 3,906,250,000,这是一个 32 位数字(与 1,000,000,000,000 不同)。
  • 或者使用全部128位来获得更高的精度和范围。
  • 使用 128 位会更慢,但 .NET 中有一些 128 位数字类型,如 Decimal
猜你喜欢
  • 1970-01-01
  • 2020-10-31
  • 2020-10-31
  • 2010-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多