根据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)吗?
答案 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
降低的精度是为其扩展范围付出的代价。