IEEE-754 能揭示什么
IEEE-754 是 JavaScript、主流语言、处理器、文件格式和网络协议常用的二进制浮点标准。位模式由符号位、带偏置指数和尾数构成,因此能覆盖很大数量级,但有效二进制位有限,许多十进制小数不能被精确存储。
本工具不仅显示舍入后的十进制,还展示完整 32 位或 64 位模式,并能从精确二进制或十六进制反向解码。正负无穷、NaN、正零、负零和次正规数会依据原始字段正确分类。
使用方法
从可信的表示开始:应用中的十进制数,或文件、寄存器、数据包里的精确位模式。
- 选择 32 位单精度 float32 或 64 位双精度 float64。
- 选择十进制、精确二进制或精确十六进制输入。
- 二进制必须恰好 32/64 位,十六进制必须恰好 8/16 位;十进制支持指数形式、NaN、Infinity、-Infinity 和 -0。
- 点击“计算”,查看完整位模式和三个字段。
- float32 会先舍入到单精度,解码结果可能与输入的小数文本略有差异。
IEEE-754 已知示例
已知向量便于核对字段边界和特殊值。
| 输入 | 编码模式 | 说明 |
|---|---|---|
| 1.0 float32 | 3F800000 | 符号为 0,存储指数 127,尾数全 0。 |
| -2.5 float32 | C0200000 | 符号位为 1,正规数的有效数为 1.25,实际指数为 1。 |
| -0 float32 | 80000000 | 指数和尾数为 0,仅符号位为 1。 |
| Infinity float32 | 7F800000 | 指数全 1 且尾数为 0 表示正无穷。 |
| NaN float32 | 7FC00000 示例 | 指数全 1 且尾数非 0 表示 NaN,具体载荷可不同。 |
| 最小正次正规 float32 | 00000001 | 指数为 0,仅最低尾数位为 1。 |
输入值与精确宽度
十进制支持可选符号、小数点和 e 指数,也支持 NaN、Infinity、-Infinity、Inf、-Inf 和带符号零。float32 会按单精度舍入,float64 使用 JavaScript 的双精度 Number。
二进制和十六进制直接表示存储位模式,不是数学上的二进制小数。可用空格或下划线分组,但清理后宽度必须精确。十六进制按常见大端显示顺序,最左侧包含符号位。
- float32:1 位符号、8 位指数、23 位尾数。
- float64:1 位符号、11 位指数、52 位尾数。
- 二进制要求 32/64 位,十六进制要求 8/16 位。
- 从位模式解码时会保留 NaN 载荷位。
编码原理
正规有限值形式为 (-1)ˢ × (1.尾数) × 2ᵉ,存储指数等于真实指数加偏置:float32 为 127,float64 为 1023。最高的 1 隐含不存储。
存储指数为 0 时,尾数全 0 表示带符号零,尾数非 0 表示次正规数,不使用隐含 1。指数全 1 时,尾数为 0 表示无穷,非 0 表示 NaN。
工具通过 DataView 读写标准位模式,并从原始字段分类,因此不会丢失 -0 或把 NaN 当作普通数值。
实际用途
仅看十进制结果无法解释浮点问题时,字段级视图很有价值。
调试精度误差
分析 0.1、累计计算或金额式小数为何出现微小偏差。
解析文件和协议
读取图形、科学数据、设备消息或抓包中的 32/64 位浮点字段。
核对测试向量
验证十六进制常量、序列化和字节序转换。
学习数值计算
观察正规数、次正规数、符号零、无穷和 NaN。
常见错误与边界
位模式本身精确,但描述它的十进制文本可能已经舍入。
期待十进制小数完全精确
多数十进制小数在二进制中无限循环,只能取最近可表示值。
混用 float32 与 float64
同一小数在两种精度下的位模式和有效位不同。
忽略负零
0 与 -0 在很多比较中相等,但符号位不同,并影响倒数等运算。
认为 NaN 只有一个模式
NaN 有多种载荷;输入位模式会保留,输入 NaN 文本则使用平台规范模式。
与其他数字工具的区别
IEEE-754 描述浮点存储,不是整数进制。
二进制补码
补码保存定宽整数;IEEE-754 有符号、指数、尾数和非有限值。
二进制计算器
二进制计算器执行精确整数算术,浮点运算会按有效位舍入。
进制转换器
普通进制转换保持数学整数,IEEE 十六进制需要拆字段才能得到浮点含义。
文本十六进制
文本工具把字节解释为 UTF-8,IEEE 工具把同样字节解释为浮点结构。