我一直在阅读,似乎IEEE 754将64位浮点数的(双)指数定义为11位。(format)
我的问题是为什么?
64位浮点数有53位意义(第一位被暗示为1位,因此实际上只存储了52位)-所以您需要指数来表示至少53位(能够将二进制基点移动到该值中的任何位置),所以现在您需要7位。
然后你也需要负指数,所以8位。
另外,您还需要表示0、负和正无穷大以及NaN- (这些表示需要4个附加表示),所以我猜是10位。
所以我的问题是:为什么11位是指数,而不是10或12,以及如何确定其他长度的浮子?
发布于 2019-03-23 18:46:22
关联:Why do higher-precision floating point formats have so many exponent bits?关于为什么设计选择是这样的。
维基百科的format非常棒。
另请参阅https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/ Bruce的系列FP文章是关于FP的中级/高级理解的基本读物。
此外,https://www.h-schmidt.net/FloatConverter/IEEE754.html对于尝试位模式也是很棒的。
关于为什么指数字段将设为最小长度的大部分推理都是错误的!为一般用途的用例所引用的一些因素是合理的设计选择,但不是必需的。
设计的选择是给出大量的动态范围,以保持高精度在一个大范围内的数字。
所以你需要指数来表示至少53 (能够将二进制基点移动到这个意义中的任何位置),所以现在需要7位。
不是这样的。没有任何内在的理由,一个二进制浮点格式的风格,IEEE754需要支持一个指数范围足够大,以实现这一点。如果大数不重要,您可以选择非常少的指数位,即使有最大的指数,最近的可表示值也比1.0更接近。
另外,6位给你64个指数值,这就足以将二进制点移到53位意义的末尾。
然后你也需要负指数,所以8位。
是的,让你的动态范围以1为中心是相当合理的。但是对于一些用例,例如音频处理,你可能只使用来自[0..1)的数量级。或者,可以通过4来为较大的临时值留出一些空间。
在这种情况下,您可能希望选择指数偏差,使大多数指数值表示负指数。
另外,您还需要表示0、负和正无穷大以及NaN- (这些表示需要4个附加表示),所以我猜是10位。
不,它不需要额外的标志位,只需要一个指数编码来表示Inf/NaN的信号取决于意义。因此,对于假设的8指数位,这只会将实际数字的可能指数值从256个减少到255个。2^-127到2^+127仍然是一个很大的范围。
最大(全1)指数值表示Inf (significand=0)或NaN (任何其他意义和值),因此IEEE binary64将2x2^52位模式- 2^64编码空间中的2个用于NaN有效载荷。这没有设计师所希望的那样有多大的用处,也可能会更好地用于渐进式溢流,比如异常允许渐变潜流。
+-0.0 是次正规数的一种特例,其最小指数值(编码为0)和significand=0,有偏exponent=0指的是意义的前导0,而不是通常的隐式1。其他意义和值是实数,允许渐进式下流。这个特例从“正常”数取另一个指数值。
因此0.0是由一个全零位模式表示的,这非常方便,因为内存通常是用整数零初始化的,并且它使使用memset (它只接受一个1字节模式,而不是一个4或8字节模式,您需要插入一个数组和任何其他重复的double)实现零数组成为可能)。
https://stackoverflow.com/questions/55316037
复制相似问题