c#误解中的小数?

(在尝试分析decimal如何工作时)&&阅读@jonskeet文章并看到msdn ,并思考过去4个小时后,我有一些问题:

在这个链接中他们说的很简单:

1.5 x 10^22有效数据

1.50 x 10^23有效数字。

1.500 x 10^24有效数字等…

好的……我们明白了。

来自jon的文章:

  sign * mantissa / 10^exponent 

像往常一样,符号只是一个位,但有96位尾数和5位指数

  ^ _ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^___ ^^^^^ 1 _ 96 5 

所以max mantiss val = 2^96-1 = 79228162514264337593543950335这是: 7.9228162514264*10^28 (根据我的iphone …无法在windows calc中看到指数表示。)

注意 :

7.9228162514264*10^2814位有效数字(根据上面的例子)

现在指数为5位的部分是无关紧要的,因为它在分母中 – 所以我需要最小值为2 ^ 0

问题#1:

msdn说: 在此处输入图像描述 28-29 significant digits

但根据我的样本( 1.500 x 10^24有效数字 ),他们有2个有效数字,即7.9 (7和9)。

如果msdn会写:

 ±79228162514264337593543950335 × 10^0 

我会理解这一点,因为所有有效数字都在表达式中

为什么他们写28-29但显示2?

问题2 :

如何为值0.5显示十进制表示(mantiss && exponent)?

最大分母可以是2^32-1 --> 31

多谢你们。

问题#3:

1 + 96 + 5 = 102位。

msdn说:

decimal关键字表示128位数据类型。

 128-102 = 26 

可以从文章中了解为什么没有使用这26位

他们将范围给出了两位有效数字,但是分别指定了精度 。 这就是为什么范围被列为“近似范围”。

0.5的decimal表示将是5的尾数和1的指数(其在反向意义上被处理为正常,即它实际上是 -1)。

为什么他们写28-29但显示2?

为了便于阅读。 它说“近似范围”和7.9E28比79228162514264337593543950335更可读(这里是E0,而不是E1)。

如何为值0.5显示十进制表示(mantiss && exponent)?

指数的范围是-28 … 0,但是,它存储(并通过构造函数参数接收)作为绝对值0 … 28。

所以0.5将具有与5相同的尾数表示,指数为-1(存储为1)。