---
title: 浮点数简介
description: "IEEE 754标准下的浮点数定义：浮点数由符号位、指数位和尾数三部分组成。32位单精度浮点数符号位占1位，指数位占8位，尾数占23位，能够表示的范围：-3.4e38～3.4e38。64位双精度浮点数符号位占1位，指数位占11位，尾数占52位，能够表示的范围：-1.79e308 ~ +1.79e308。"
url: https://www.hikunpeng.com/document/detail/zh/perftuning/computp-wp/kunpengcomputp_19_0019.html
sourcePath: /source/zh/perftuning/computp-wp/kunpengcomputp_19_0019.html
indexId: 365c7cd8a84ed596a3b50a7ca19a76ff51f82f8d9148ed660bcd27d62af98a2860
---
# 浮点数简介

#### 浮点数定义

IEEE 754标准下的浮点数定义：浮点数由符号位、指数位和尾数三部分组成。32位单精度浮点数符号位占1位，指数位占8位，尾数占23位，能够表示的范围：-3.4e38～3.4e38。64位双精度浮点数符号位占1位，指数位占11位，尾数占52位，能够表示的范围：-1.79e308 ~ +1.79e308。

图1 浮点数组成


#### 非规格化浮点数

非规格化浮点数（Denormalized Number）是浮点运算中的一个特殊的值，在规格化浮点数中，尾数的前导固定为1，如浮点数0.001234，其规格化浮点数表示为1.234e-3，但对于某些极小值的浮点数，例如1.234e-40，该数的指数部分超出单精度浮点数的指数范围，则需要在尾数补0，表示为0.01234e-38，类似这种尾数前导为0的浮点数即为非规格化浮点数。单精度能够表示最小的非0正数是1.17549435082e-38（0x800000），其非规格化浮点数范围是-1.17549435082e-38~1.17549435082e-38。


#### ULP

ULP（Unit in the Last Place）定义为：在计算机科学和数值分析中，最后一位上的单位值或称最小精度单位，缩写为ULP，是毗邻的浮点数值之间的距离，也即浮点数在保持指数部分的时候最低有效数字为1所对应的值。

以实数值0.1来说明ULP，实数值为0.1的单精度浮点数为0x3dcccccc(0.099999994039536)，或者为0x3dcccccd(0.10000000149012)。则实数值0.1的ULP为|0.10000000149012 - 0.099999994039536| = 0.000000007450584

如果计算机使用向下近似的方法则用0.099999994039536来表示0.1，误差为0.1-0.099999994039536=0.000000005960464 ≈ 0.8ulp

如果计算机使用向上近似的方法则用0.10000000149012来表示0.1，误差为0.10000000149012-0.1=0.00000000149012 ≈ 0.2ulp。


#### 舍入

IEEE 754标准定义了4种舍入方式：

- Round toward nearest：舍入到最接近的数，在一样接近的情况下偶数优先（在二进制中是以0结尾的）。
- Round toward +∞：会将结果朝正无限大的方向舍入。
- Round toward -∞：会将结果朝负无限大的方向舍入。
- Round toward zero：会将结果朝0的方向舍入。
