Floating point 小数点32 vs浮点32,哪个更适合存储

Floating point 小数点32 vs浮点32,哪个更适合存储,floating-point,decimal-point,ieee,Floating Point,Decimal Point,Ieee,根据IEEE 754-2008,有二进制32和十进制32标准: Decimal Decimal Name Common name Base Digits E min E max Digits E max binary32 Single precision 2 23+1 −126 +127 7.22

根据IEEE 754-2008,有二进制32和十进制32标准:

                                                            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具有相似的精度,但范围要大得多?那么,是什么阻止了对浮点32使用小数32呢?这就是它们的性能(即速度)?

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

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


(*)与a类似,但表示十的幂。

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

小数32
的精度与
浮点
的精度不一样。例如,让我们拿1 000 000 000(10亿美元)

使用
小数32
,它将在内存中表示为1 000 000×103,有效位为7位。实际上,10亿(100亿)的资金可能还有许多其他的代表 000×104,…所有这些都被称为这个数字的队列),但对于我们将要做的事情,它们将不那么精确

如果是
浮动
,则表示为15 625 000×26或更精确地表示为1.110111001101011001000×10(10011100-1111111)

因此,到下一个精确数字的最小步骤(即,通过将1添加到有效位的LSB)是对于
小数32
103=1000,但是对于
浮点
,26=64,因此在这种情况下
浮点
是×15.625更精确!但请注意,并非所有数字都是如此;比率将取决于两个指数,我在这里选择了一个具有重要差异的具体案例


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

我不知道您的表在说什么。为什么它有两列名为“Digits”和两列名为“E max”?当您需要正确的十进制值时,应该使用decimal32,因为float使用的是二进制,而二进制不能正确地将大多数浮点值存储在十进制中。但几乎没有现代体系结构支持十进制浮点。如果需要,十进制浮点在软件中实现。所以,如果你想要速度,你必须使用单或双precision@Gabe第一个是使用基数中的数字,第二个是十进制数字,OP的副本缺少一些部分。在1和1e7之间有194549376个二进制32号;这大约是小数点32的2.8倍,而且它们的间隔也更均匀(对数)。