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 还原成真实指数的常数。
相关推荐
chudonghao9 分钟前
[UE学习笔记][基于源码] 运行时网格 PMC / DMC / RMC
笔记·学习·ue5
智者知已应修善业1 小时前
【51单片机调用__TIME__无法实时时间】2023-7-10
c++·经验分享·笔记·算法·51单片机
Tutankaaa1 小时前
防震减灾知识竞赛题库:地震常识、应急避险与自救互救指南
经验分享·笔记·学习
wljt1 小时前
SpringBoot学习笔记五:Spring Boot的web开发
spring boot·笔记·学习
Hello_Embed1 小时前
嵌入式上位机开发入门(二十八):JSON 与 JsonRPC 入门
网络·笔记·网络协议·tcp/ip·嵌入式
U盘失踪了2 小时前
Playwright codegen脚本录制
笔记
conti1232 小时前
水题记录2.4
c++·笔记·题解
做cv的小昊2 小时前
【TJU】研究生应用统计学课程笔记(4)——第二章 参数估计(2.1 矩估计和极大似然估计、2.2估计量的优良性原则)
人工智能·笔记·考研·数学建模·数据分析·excel·概率论
叹一曲当时只道是寻常3 小时前
memos-cli 安装与使用教程:将 Memos 笔记同步到本地并支持 AI 语义搜索
人工智能·笔记·golang
寒秋花开曾相惜3 小时前
(学习笔记)4.1 Y86-64指令集体系结构(4.1.6 一些Y86-64指令 )
linux·运维·服务器·开发语言·笔记·学习·安全