float浮点数计算-原理笔记

文章目录

浮点数计算不太好理解。

浮点数的结构

浮点数的结构分为3部分:

符号位 # 符号位可不是小数点位,别弄混了

指数位

尾数位

类型 符号位 指数位 尾数位
16位浮点数 1位 5位 10位
32位浮点数 1位 8位 23位
十进制 二进制 符号位 指数位 尾数位
0.625 0.5+0.125=2-1+2-3=1.01x2-1 0 -1 1.01
2的次方对照表

这里只展示25到2-10次方:

二进制 25 24 23 22 21 20 2-1 2-2 2-3 2-4 2-5 2-6 2-7 2-8 2-9 2-10
十进制 32 16 8 4 2 1 0.5 0.25 0.125 0.0625 0.03125 0.015625 0.0078125 0.00390625 0.001953125 0.0009765625
偏移量

负数在计算时太麻烦,所以存的时候加个偏移量,都存为正数,解的时候再减掉。

fp16 偏移量为15

fp32 偏移量为127

为什么是这个值呢?

以fp32为例,8位指数位的范围是-126到127,0和128被保留了,表示0和无穷大。

所以即使是最小值-126,加上127也是正数,符合设计理念。

同理fp16,5位指数位的范围-14到15,0和16被保留了。

最小值-14,加上15也是正数,也符合设计理念。

所以存储值的指数位的值是 (-14+15,15+15)= (1,30)

当反算值的时候,减去15,30-15=15,最大值的情况是215

浮点数计算公式

这块不太好理解,有时间再看看。

IEEE 754 标准下,浮点数的通用计算公式其实就是一个"二进制版的科学计数法"。

对于最常见的 规格化数,公式如下:

符号说明:

符号 含义 说明
S 符号位 0 代表正数,1 代表负数。
M 尾数 存储的是小数部分。注意公式里是 1.M ,这意味着二进制小数点前默认隐藏了一个 1(这叫隐含位)。
E 指数存储值 指数位里实际存的二进制数(无符号整数)。
\text{Bias} 偏移量 用来把存储的指数 E 还原成真实指数的常数。
相关推荐
A923A2 小时前
【小兔鲜电商前台 | 项目笔记】第二天
前端·vue.js·笔记·项目·小兔鲜
bukeyiwanshui2 小时前
2026.4.2随堂笔记
笔记
CheerWWW2 小时前
C++学习笔记——初始化列表、创建和实例化对象、new 关键字、隐式构造与 explicit 关键字、运算符与运算符重载
c++·笔记·学习
南境十里·墨染春水2 小时前
C++笔记 类模板(面向对象)
开发语言·c++·笔记
小陈phd2 小时前
多模态大模型学习笔记(二十八)—— 基于Qwen多模态大模型的城市道路积水智能检测助手实战
笔记·学习
南境十里·墨染春水3 小时前
C++ 笔记 function 函数包装器模板
开发语言·c++·笔记
泡泡茶壶Wending4 小时前
opengl笔记之VBO,VAO
笔记
鱼鳞_4 小时前
Java学习笔记_Day21
java·笔记·学习
南境十里·墨染春水4 小时前
C++ 笔记 仿函数(函数对象)
开发语言·c++·笔记