浮点数 C语言 IEEE754

news2024/10/3 0:32:29

知识内化:用自己的语言讲述一遍,把复杂的东西解释得简单透彻

计算机表示浮点数的问题:(自己分析一下这个问题)

输入是:任意一个浮点数,正无穷到负无穷,包括整数部分和小数部分 22222.99999999

限制是:计算机只有32bit来表示一个浮点数

输出是:如何利用这32bit来表示浮点数,尽可能范围大,精度高

方案探索

像科学计数法一样,10^20 =1e10不用自己用20个十进制的位来写,而是写成1.0*10^20

也就是科学计数法可以只写小数部分指数部分,来表示一个范围更大的数,原来的计数方法是通过乘法和加法来表示一个数,现在是通过指数来表示,因此更少的bit可以表示更大的数

原来的方案:4bit   x = [1,2,3,4],  y = [power(2,i) for i in x]=[2,4,8,16],最多表示到16= 2^4

科学计数法的方案: 4bit r= [2,4,8,16] , y = [power(2,i) for i in r]=[4,16, 256, 65536], 最多可以表示 2^16

用画图就可以很快看到两者的区别

 方案细化

接下来的问题是,我们讨论,多少bit给指数,多少bit给小数,精度和范围是多少

本质通用的二进制小数的表示位:类比十进制

 因为编码长度有限,就像十进制不能精确表示1/3,只能表示有限位的十为基底的数,那么二进制小数也只能精确表示以2为底的数,1/5 = 0.2 只能近似表示为 0.125+ 0.0xxxx + xxx+xxx

小数部分(有效数字):23 位给小数,精度可以是 2^{23} \rightarrow (2^{10})^{2.3} \rightarrow ~ (10^3)^{2.3} \rightarrow 10^{6.9}

2^{-23}\rightarrow 10^{-6.9} 大概是1e-6, 1e-7的精度

指数部分(阶码):8位, 带符号的 2^{-128} \rightarrow 2^{127}     ,大概范围是 2^{128}\rightarrow (2^{10})^{12.8}\rightarrow (10^{3})^{12.8}\rightarrow 10^{ 38.4}  大概是 10的正负38次方

符号位:1位

一般表示:1.001101 *2^n 

问题:

  • 0怎么表示
  • 正负无穷怎么表示
  • 一般数字怎么表示
  • NaN 怎么表示(无效数字,不合法,比如除以0)

针对这个问题提出的解决方案,根据exp分成3中情况,全0,全1,非0非1

再分别看三种情况

1.第一种情况,本来8bit可以表示0~255,扣除全零全一,剩下1~254,我们默认偏移127, 得到-126~+127。 小数部分 M=1+f, 隐藏1开头的

 2. 第二种情况,指数为0,小数部分M=f  可以表示0,要意识到一个问题就是,ieee754的浮点数有两个0的表示,+0,-0

3.第三种情况:特殊值:正负无穷,NaN

下面的图是float8 e4m3

但有时候要跳出来,比如ieee754为什么NaN不定义为全为1,这样还可以释放exp=1111的情况、我在fp8的定义中就看到这个这个释放

float8 in DL

最近一个同事问我,为什么浮点计算遇到reduction不能自动向量化,提升unsfe,会改变计算顺序,我写出了下面这个demo. 本质是unroll 4就改变了计算顺序,和zhi'l

#include <stdio.h>

int main()
{
    float f1 = -1e10f;
    float f2 = 1e-3f;

    float s = 1e10f;
    s = s + f1;
    s = s + f2;

    float p = 1e10f;
    float temp = (f1 + f2);
    p = p + temp;
    printf("s=%f, p = %f\n", s, p); // 0.001    p = 0
    return 0;
}

 最后再 v[0]+=v[1]  

            v[0]+=v[2]

           v[0]+=v[3]

s就是v[0]

mitchell近似乘法计算

expbias= 127 = 0 0111 1111 +0*23

               = 0011 1111 1000 0000 0000 0000 0000

              = 0x3f80000

    float a = 12.3f;
    float b = 4.56f;
    int c = *(int*)&a + *(int*)&b - 0x3f800000;
    printf("近似结果:%f\n", *(float*)&c);
    printf("精确结果:%f\n", a * b);
    return 0;

如何操作浮点数的bit, 这里有一个链接:https://github.com/myisabella/datalab/blob/master/bits.c#L350

example

​​​​​​​

 

有效数字

#include <stdio.h>
int main()
{
    float a = 1e8;
    float b = a + 1.0;
    float c = b - a;
    printf("%f %f %f\n", a, b, c); // 1e8 结果为0,1e7,结果为1,有效数字
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/7328.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

支持I2S数字音频接口;音频功放芯片NTP8835C

韩国耐福数字功放系列其NTP8835C芯片采用I2S数字输入接口&#xff0c; 可用于音频应用场合&#xff0c;例如蓝牙&#xff0f;WIFI音箱、音响设备&#xff0c;投影仪、高清电视、会议系统等。通过I2S传输数字音频信号&#xff0c; 能够还原和输出高保真高质量的音频信号。 NTP88…

阿里SQL又爆神作数据生态:MySQL复制技术与生产实践笔记

前言 在开源国产数据库崛起的今天&#xff0c;这本佳作《数据生态:MySQL复制技术与生产实践》&#xff0c;无疑将为MySQL在各行业的推广和使用做出贡献&#xff0c;这也是像我这样的从商业数据库转到开源数据库的从业者的福音。 MySQL能够成为“最流行的开源数据库”&#xf…

【数据结构】图—图的存储结构(邻接矩阵法、邻接表法、邻接多重法、十字链表法)

图的存储结构1 邻接矩阵法2 邻接表法3 十字链表法4邻接多重法1 邻接矩阵法 主要存储的是点&#xff0c;所以空间复杂度和点(v)有关 对象&#xff1a;稠密图、有向图、无向图 表示唯一、适合稠密图空间复杂度&#xff1a;O&#xff08;v^2&#xff09;无向图邻接矩阵一定是一个…

Docker环境安装OWT Server[Open WebRTC Toolkit]

Docker环境安装OWT Server[Open WebRTC Toolkit] 目录 Docker环境安装OWT ServerDocker自定义开发OWT Server wiki&#xff08;照着操作会有不注意的坑&#xff09;&#xff1a;An easy way to quickly evaluate OWT with Docker image 相关文章&#xff1a; Ubuntu环境安装OW…

Emlog评论区显示用户操作系统与浏览器信息教程

近期有不少初入Emlog的站长来咨询Emlog程序的评论区域如何实现获取到评价用户的操作系统和浏览器信息&#xff0c;其实要实现该功能也很简单&#xff0c;而且网上也有不少类是的插件。今天&#xff0c;冬镜就和大家聊聊不用插件来实现获取评论用户操作系统与浏览器信息。改造前…

软件测试 -- 进阶 3 软件测试设计

我并没有什么方法&#xff0c;只是对于一件事情很长时间很热心地去考虑罢了。-- 牛顿 1. 设计是什么&#xff1f; 设计是有目标、有计划的创造和创作活动&#xff0c;按特定需求制定解决方案。设计指把头脑中的设想/想法通过合理的规划、周密的计划、有效的方式表达出来的过程…

【C#】生成WebAPI实现简单调用本地数据库

需求&#xff1a;通过C#生成WebAPI&#xff0c;供微信小程序调用以访问本地数据库(微信小程序部分下次再说&#xff0c;今天先记录一下C#生成WebAPI相关的坑与注意点)。 数据库&#xff1a;SQL Server Web服务器&#xff1a;IIS 编程语言&#xff1a;C# IDE&#xff1a;VS20…

微信|零到一打造一款与微信互通的自动聊天机器人应用

本文干货充足篇幅较长&#xff0c;建议收藏后阅读避免迷路。文末可获取【自动聊天机器人源码和Demo】。 本教程教大家使用即构 ZIM SDK 创建一个能与微信端互动消息的自动聊天机器人应用。ZIM SDK可广泛应用于娱乐社交、电商购物、在线教育、互动直播等多种场景下即时通讯功能实…

R语言中的函数18:readxl::read_excel(), read_xls(),read_xlsx()

文章目录read_excel(), read_xls()和read_xlsx()函数介绍实例实例1利用read_xls读取文件实例2指定读取数据的范围range实例3读取有缺失值的数据实例4read_xls和read_xlsx需要对应的文件类型实例5read_excel的使用read_excel(), read_xls()和read_xlsx()函数介绍 read_excel(),…

设计模式----单例模式

设计模式之单例模式 文章目录设计模式之单例模式一. 简介1. 什么是单例模式&#xff1f;2. 单例模式的应用场景&#xff1f;3. 单例模式的类型&#xff1f;二. 单例模式的几种写法1. 饿汉式2. 懒汉式3. 懒汉式&#xff08;线程安全性能优化&#xff09;4. 使用volatile防止指令…

【ARM】Bootloader的调试

Bootloader 为啥要做一个bootloader&#xff0c;因为最近客户调试MCU中&#xff0c;中断向量表和代码不设置一个区域内&#xff0c;在0x0的地址放置中断向量表&#xff0c;并在0x18000000的地址放置代码&#xff0c;发现会有一点问题&#xff0c;想测试一下在0x18000000的地址…

Linux C/C++异常处理方法

简介 C/C属于较为接近底层的语言&#xff0c;不像Java等“高级”语言&#xff0c;所有异常都能catch住&#xff08;例如常见的core dumped&#xff09;异常&#xff1a; int first_func() {int* error_integer nullptr;return *error_integer; } 对于异常&#xff0c;首要任…

传统 Web 框架部署与迁移

与其说 Serverless 架构是一个新的概念&#xff0c;不如说它是一种全新的思路&#xff0c;一种新的编程范式。 但是原生的 Serverless 开发框架却非常少。以 Web 框架为例&#xff0c;目前主流的 Web 框架“均不支持 Serverless 模式部署”&#xff0c;因此我们一方面要尝试接…

跳槽or裸辞?2022年真不建议···

2022年是个“难过”的一年。 疫情、经济寒冬、房价跳水、基金股票一片红。其实这些都是连锁反应。 企业不好过&#xff0c;也会引发一系列裁人潮&#xff0c;其实最近挺多小伙伴反映过&#xff0c;今年过的如牛马&#xff0c;一人干活量顶仨。想辞职躺平&#xff0c;又没有绝…

BurpSuit官方实验室之信息泄露

BurpSuit官方实验室之信息泄露 这是BurpSuit官方的实验室靶场&#xff0c;以下将记录个人信息泄露共5个Lab的通关过程 Web Security Academy: Free Online Training from PortSwigger lab1&#xff1a; Information disclosure in error messages 错误消息中的信息泄露 在…

从金鸡百花电影节,看“鼓浪屿元宇宙”的元力、魅力与想象力

文|智能相对论 作者|青月 元宇宙的走红&#xff0c;始于2021年3月10日Roblox在美上市&#xff0c;这个和现实世界相平行又相交叉的虚拟世界开始引起市场的注意&#xff0c;并迅速风靡全球。 虽然2022年&#xff0c;关于元宇宙的探索已经进入了一个相对务实的阶段&#xff0c…

【毕业设计】机器视觉停车位识别检测系统 - python 深度学习

文章目录1 简介2 检测效果3 实现方式3.1 整体思路3.2 检测空车位3.3 车辆识别4 最后1 简介 &#x1f525; Hi&#xff0c;大家好&#xff0c;这里是丹成学长的毕设系列文章&#xff01; &#x1f525; 对毕设有任何疑问都可以问学长哦! 这两年开始&#xff0c;各个学校对毕设…

【面试题】「2023」JavaScript 最新高频 前端面试题 指南 (必看)

前言 大家好&#xff0c;本次总结了关于JavaScript的上百道高频面试考点&#xff0c;感谢大家的留言点赞收藏 &#x1f497; 如果文中有不对、疑惑或者错字的地方&#xff0c;欢迎在评论区留言指正&#x1f33b; 更多题库 地址&#xff1a;前端面试题库 基础篇 1. 将数组的…

【微前端开发环境下,加载远程子应用的实战。】

一开始我们的本地开发运行的环境&#xff0c;如果没有启动子应用的话。对应的页面是白屏的。 问题&#xff1a; 当有关联资源需要跳转时无法跳转&#xff0c;需要额外打开一个浏览器tab页到环境上面执行操作。当bug类型为纯ui-server端的内容时&#xff0c;需要手动启动bug相关…

【数据库原理及应用】——事务并发控制和恢复技术(学习笔记)

&#x1f4d6; 前言&#xff1a;事务是数据库操作的基本逻辑单元&#xff0c;事务处理技术主要包括数据库并发控制技术和恢复技术。本章首先介绍了事务的基本概念和四个特性&#xff0c;然后讨论事务并发操作可能引起数据库的不一致性&#xff0c;继而引入数据库的并发控制技术…