首页  >  文章  >  后端开发  >  为什么次正规数是精度和表示长度之间的权衡?

为什么次正规数是精度和表示长度之间的权衡?

Susan Sarandon
Susan Sarandon原创
2024-11-08 12:34:01203浏览

Why are Subnormal Numbers a Tradeoff Between Precision and Representation Length?

IEEE 754 基础知识

IEEE 754 浮点标准将数字组织为以下格式:

  • 1 位:符号
  • 8 位:指数
  • 23 位:分数

次正规数

工程师实现了次正规数来解决问题。除 0.0 之外的所有数字在二进制表示中均以 1 开头。为了避免在该前导位上浪费精度,他们创建了“前导位约定”。

但是,这将使最小的非零数字比以前的标准更大。工程师引入了次正规数作为例外,其中:

  • 指数为 0
  • 前导位设置为 0
  • 指数固定为 -126

这允许表示小于最小非次正规数的数字value.

次正规数权衡

次正规数表示精度和表示长度之间的权衡。较小的数字会降低精度,但表示值的数量会增加一倍。

可视化

在几何上,次正规扩展了指数 0 的范围,使数字的可用空间加倍并在该范围内减小间距。

实施次正规

C 浮点表示大多数台式机上的 32 位 IEEE 754 数字。一个示例 C 程序演示了次正规数的属性:

#include <assert.h>
#include <inttypes.h>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>

typedef struct {...} Float32; // Represents the 32-bit floating point

float float_from_bytes(..., uint32_t fraction); // Reconstructs float from individual parts
bool float32_equal(float f, uint32_t sign, uint32_t exponent, uint32_t fraction); // Compares float to individual parts

int main() {
    assert(float32_equal(0.5f, 0, 126, 0));
    assert(isnormal(0.5f));
    ... // More assertions

    return EXIT_SUCCESS;
}

实现中的次正规数

次正规数在某些平台上的实现效率可能较低。 ARMv8 提供“Flush-to-Zero”模式,其中次正常值舍入为零以实现性能优化。

非正常与次正常

次正常和非正常是同义词,请参阅为同类型号码。

其他特殊案例

  • 无穷大:表示太大而无法用正常数字表示的数字。
  • NaN(不是数字):表示通常未产生有效结果的计算由于输入无效。

以上是为什么次正规数是精度和表示长度之间的权衡?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn