浮点数根据 IEEE 754 标准进行组织。在单精度中,格式由 1 位符号、8 位指数和 23 位分数组成。指数有 -127 的偏差,因此 0 代表 2^-126,1 代表 2^-125。
“前导位约定”假设除 0.0 之外的每个数字在二进制中都以 1 开头。这避免了浪费前导数字的精度位。然而,它为 0.0 创建了一个例外,它的指数位和分数位都等于 0。
因此,可以表示的最小非零数是 1.0 × 2^-126。为了表示更小的数字,工程师引入了次正规数,其前导位为 0,固定指数为 -126。
最大的次正规数为 0.FFFFFE × 2^-126,非常接近到最小的非次正规数。最小的非零次正规数是 0.000002 × 2^-126,甚至更接近 0.0。
次正规数是精度和表示长度之间的权衡。例如,最小的非零次正规数的精度仅为 1 位,因此将其除以 2 会精确地得到 0.0。
在可视化中,次正规数将指数 0 范围的长度加倍,并将指数 0 范围的长度减半与没有次正规的系统相比,该范围内的点数。这导致可表示的数字空间中存在一些间隙。
在 C 中,浮点数据类型表示单精度 IEEE 754 浮点数。次正规数可以使用 isnormal() 函数来识别,该函数对于次正规数返回 false,对于正规数返回 true。
以上是为什么我们有次正规浮点数?的详细内容。更多信息请关注PHP中文网其他相关文章!