c#误解中的小数?
(在尝试分析decimal
如何工作时)&&阅读@jonskeet文章并看到msdn ,并思考过去4个小时后,我有一些问题:
在这个链接中他们说的很简单:
1.5 x 10^2
有2
有效数据
1.50 x 10^2
有3
有效数字。
1.500 x 10^2
有4
有效数字等…
好的……我们明白了。
来自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^28
有14位有效数字(根据上面的例子)
现在指数为5位的部分是无关紧要的,因为它在分母中 – 所以我需要最小值为2 ^ 0
问题#1:
msdn说: 28-29 significant digits
但根据我的样本( 1.500 x 10^2
有4
有效数字 ),他们有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)。