IEEE 754 浮点数可视化工具

十进制浮点数与 IEEE 754 二进制位串双向转换,支持单精度(32 位)与双精度(64 位)。 符号位、指数位、尾数位三色可视化分解,自动识别零、非规格化数、无穷大、NaN。 基于 DataView 实现位级精确 reinterpret,适用于理解浮点数精度问题与计算机组成原理学习。

符号 1指数 8尾数 23
符号位0正数
偏移指数128原始值
实际指数1128 - 127
尾数值4781507十进制
隐含位1规格化隐含 1
数值类别规格化数类型
十进制结果3.140000104904175
基于 DataView 实现浮点数与二进制位的位级 reinterpret,双精度使用 BigInt 处理 64 位整数。所有计算在浏览器本地完成。

常见问题

什么是 IEEE 754?为什么浮点数会有精度问题?

IEEE 754 是计算机浮点数表示的国际标准,定义了单精度(32 位)和双精度(64 位)格式。 浮点数用符号位 + 指数位 + 尾数位三段表示,其中尾数位位数有限(单精度 23 位、双精度 52 位), 无法精确表示所有十进制小数。例如 0.1 在二进制中是无限循环小数,存储时被截断,导致 0.1 + 0.2 ≠ 0.3 这样的精度误差。本工具可视化每一位的含义,帮助理解精度问题的根源。

单精度和双精度有什么区别?

单精度(float32):共 32 位 = 1 符号位 + 8 指数位 + 23 尾数位,偏移量 127, 精度约 7 位有效十进制数字,范围约 ±3.4×10³⁸。
双精度(float64):共 64 位 = 1 符号位 + 11 指数位 + 52 尾数位,偏移量 1023, 精度约 15-17 位有效十进制数字,范围约 ±1.8×10³⁰⁸。
JavaScript 的 Number 类型就是双精度(float64)。双精度尾数位更多,精度更高,但占用空间是单精度的两倍。 GPU 计算和图形渲染常用单精度以节省带宽和显存。

为什么 0.1 + 0.2 ≠ 0.3?

十进制 0.1 转为二进制是无限循环小数 0.0001100110011...,存储时被截断为有限位数。 单精度下 0.1 ≈ 0.10000000149,双精度下 0.1 ≈ 0.10000000000000000555。 两个有误差的数相加,误差累积,结果不等于 0.3 的二进制表示。 用本工具输入 0.1,可以看到尾数位的最后几位不为零——这就是精度丢失的直观体现。 这是所有使用 IEEE 754 的编程语言(JavaScript、Python、Java、C 等)的共性,不是 bug。

什么是非规格化数(Denormalized Number)?

当指数位全为 0 时,该浮点数是非规格化数(也叫次正规数/Subnormal)。 与规格化数不同,非规格化数没有隐含的 1,尾数直接表示 0.xxxx。 这使得非规格化数能表示比最小规格化数更小的值(代价是精度降低),实现"渐进下溢"—— 当计算结果趋近于零时,精度逐步降低而非突然变为零。非规格化数的实际指数为 1 - bias 而非 0 - bias(这是 IEEE 754 的特殊设计,保证从非规格化到规格化的平滑过渡)。

符号位、指数位、尾数位分别是什么?

符号位(Sign):最高 1 位,0 表示正数,1 表示负数。
指数位(Exponent):用偏移量表示实际指数。单精度 8 位偏移 127,双精度 11 位偏移 1023。 指数值 = 存储值 - 偏移量。例如单精度指数存储 128,实际指数 = 128 - 127 = 1。
尾数位(Mantissa/Significand):存储小数部分。规格化数有一个隐含的 1, 实际有效数字为 1.尾数。例如尾数 100...0 表示 1.1₂ = 1.5。 浮点数的值为:(-1)^符号 × 1.尾数 × 2^实际指数。

为什么指数需要偏移量(Bias)?

指数可以是正数或负数,IEEE 754 不使用补码表示指数,而是用偏移量(Bias)将所有指数映射为无符号整数。 单精度偏移 127:实际指数 -126 ~ +127 映射为存储值 1 ~ 254(0 和 255 保留给特殊值)。 这样设计有两个好处:① 可以直接用整数比较大小判断两个浮点数的大小关系(符号位相同的情况下); ② 简化硬件比较电路。偏移量的选择使得正负指数的表示范围大致对称。

这个工具适合哪些使用场景?

计算机组成原理学习:理解浮点数的二进制表示,符号位/指数位/尾数位的含义;
浮点数精度分析:查看 0.1、0.2 等值的实际存储,理解精度丢失根源;
跨语言数据交互:验证 Python/Java/C 等语言的浮点数表示是否一致;
嵌入式/GPU 开发:单精度与双精度的精度差异评估;
特殊值调试:识别 NaN、Infinity、-0、非规格化数等特殊浮点值。

数据会上传到服务器吗?

不会。本工具完全在浏览器内运行,所有浮点数与二进制的转换由 JavaScript 的 DataView API 在你本地执行, 不会发送任何输入数据或转换结果到服务器。全程零网络请求,可离线使用。