decimal32 vs float32,这对存储更好

时间:2014-01-10 04:47:05

标签: floating-point decimal-point ieee

根据IEEE 754-2008,有binary32和decimal32标准:

                                                            Decimal Decimal
Name        Common name         Base  Digits E min  E max   Digits  E max
binary32    Single precision    2     23+1   −126   +127    7.22    38.23
decimal32                       10    7      −95    +96     7       96

所以两者都使用32位,但十进制32有7位数,E max为96,而float32有7.22位,E max为~38。

这是否意味着十进制32具有相似的精度但更好的范围?那么什么阻止在float32上使用decimal32?这是他们的表现(ie.speed)吗?

3 个答案:

答案 0 :(得分:2)

当你说“十进制32具有相似的精度......”时,你的推理是有缺陷的:在1和1e7之间,binary32可以代表比decimal32多得多的数字。选择比较表示为二进制格式的“等效”数字十进制数字的精度给出了错误的印象,因为在这些十进制数字序列中,在某些区域中,二进制格式可以表示具有额外精度的数字。

1和1e7之间的binary32数的数量可以通过减去它们的二进制表示来计算,就好像它们是整数一样。相同范围内的decimal32数字是7十年(*)或7e7(1到9.999999之间的1e7数字,10到99.99999之间的另一个1e7数字......)。

(*)类似于binade但是对于10的权力。

答案 1 :(得分:1)

如果需要精确表示小数,请使用decimal32。如果通常对任意实数的良好近似更重要,请使用binary32。

答案 2 :(得分:0)

Decimal32的精度与float不同。例如,让我们拿1 000 000 000(10亿)。

使用Decimal32,它将在内部存储器中表示为1 000 000×10 3 ,其中7位为有效数字。实际上,还有十亿个其他许多表示形式(100 000×10 4 ,...全部都称为该数字的同类),但它们对于我们尝试做的事情不够精确。

float的情况下,它表示为15 625 000×2 6 或更准确地以二进制形式表示为1.11011100110101100101000×10 (10011100-1111111)

因此,此处到下一个精确数字的最小步长(即通过在有效位的LSB加1)是Decimal32 10 3 = 1000但2 6 = 64,代表float,因此float在这种情况下的精确度是×15.625!但是请注意,并非所有数字都如此。该比率将取决于两个指​​数,我在这里选择一个具有重要区别的特定案例。

Decimal32降低的精度是为其扩展范围付出的代价。