C语言浮点数实现之实例(二)

        上一章《C语言浮点数实现(一)》给大家讲解了浮点数的由来、组成以及由于浮点数导致的世界级重大事故,以提高大家对学习浮点数积极性,了解浮点数的重要性。虽说大多数场景基本上不会在意这些细节,但是难免会遇见少数场景哈!例如:某迪的底盘团队就遇见过,如果没记错的话,该问题从发现到解决总计用时接近一周左右。可能有朋友会发出疑问,迪子的研发团队如此庞大,怎么会出现这种问题?这里就给大家解释一下,这并不完全是迪子导致的问题,这是由于更换芯片后芯片平台的运算器导致的,当然,更换后的芯片仍是车规级芯片。说多了哈,若有感兴趣的朋友,可以私信我。下面就直接开始主题,小数与浮点数的互转。

目录

1、浮点数的组成

2、3.14159转浮点表达式实例

2.1、第一步:计算整数部分为3

2.2、第二步:计算小数部分为0.14159

2.3、获取符号位

2.4、获取阶码

2.5、获取尾数

2.6、获取最终浮点数的二进制表达式

3、0 10000001 01010000…转小数

3.1、获取符号位

3.2、获取阶码

3.3、获取尾数

3.4、获取转换后的小数

4、总结

1、浮点数的组成

        解:在《C语言浮点数实现(一)》已经详细说过了,不知道的朋友可以看看历史文章。

2、3.14159转浮点表达式实例

2.1、第一步:计算整数部分为3

        数学计算:3 除以 2 = 1余1;再用1除以2 = 0余1,最后取两次余数,也就得到11;

2.2、第二步:计算小数部分为0.14159

        数学计算:

                        0.14159*2=0.28318->取整 = 0;

                        0.28318*2=0.56636->取整 = 0;

                        0.56636*2=1.13272->取整 = 1;

                        0.13272*2=0.26544->取整 = 0;

                        0.26544*2=0.53088->取整 = 0;

                        0.53088*2=1.06176->取整 = 1;

                        0.06176*2=0.12352->取整 = 0;

                        0.12352*2=0.24704->取整 = 0;

                        …….

                        …….

                        这里就不继续运算了,篇幅太长了,而且基本上没有限制;

        综上:最后得出的3.14159二进制表达为11.001001……;

2.3、获取符号位

        因为3.14159是正数,所以符号位等于0;

2.4、获取阶码

        转化为1.xxxxxxxxx格式

                11.001001……转化为1.xxxxxxxx格式,那小数点就需要向左移1位。

                即:1.1001001…*2^1

        由此可得,其阶码为1 + 127,float的阶码偏移为127,1为小数点的偏移位数。

2.5、获取尾数

        尾数就是1.1001001…2^1的小数部分->1001001…;

2.6、获取最终浮点数的二进制表达式

                                符号位(s) + 阶码(exp) + 尾数(f)

                                即:0 10000000(128)  1001001…;

3、0 10000001 01010000…转小数

3.1、获取符号位

        0 10000001 01010000…的符号位为0,表明其值为正数。

3.2、获取阶码

        0 10000001 01010000…的阶码为 100000001 ,十进制表达就是129,实际指数为129 - 127 = 2,这里表明小数点向左移动了两位。

3.3、获取尾数

        0 10000001 01010000…的尾数为 0101000…。

        依据第二节计算尾数的方式以及3.2节得出的实际指数,进行逆运算,计算尾数01010000…的实际尾数过程如下:

        因为实际指数为2,表明小数点向左偏移两位;

        所以实际尾数等于1.010100000…;

3.4、获取转换后的小数

        依据1.010100000…计算规则,小数前一位乘以2^0,小数后一位乘以2^(-1)依次递减。

                                1*2^0 + 0*2^(-1) + 1*2^(-2) + 0*2^(-3) + 1*2^(-4) + ……..

                           = 1 + 0 + 1/4 + 0 +1/16 + …

                           = 1.3125……

        最终得出1.3125...*2^(2) = 1.3125...*4 = 5.25......

4、总结

        基于以上,相信大家会对小数与浮点数的互转有一定概念,这里也说下为什么不直接以3.14159进行相互举例,而是通过两组不同的数据,是因为为了体现其差异性,让大家更好的理解“阶码”这一概念。总之,通过上述的讲解,大家应该要有一个概念,浮点数的表达是无穷无尽的,而我们的float仅仅取了23位,double取了52位,所以在不同平台使用float表示其数据时,会有一定的误差,这是正常的,但是作为一名优秀的工程师,理应了解这一特性,让误差控制在自己手里,让计算机运行在自己脑子里。

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

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

相关文章

ffmpeg视频滤镜:定向模糊-dblur

滤镜简述 dblur 官网链接 > https://ffmpeg.org/ffmpeg-filters.html#dblur 有一个模糊滤镜&#xff0c;我试了一下&#xff0c;没有感觉到它的特殊之处, 这里简单介绍一下。 滤镜使用 滤镜的参数 angle <float> ..FV.....T. set angle (from 0 t…

019集——global全局引用报错解决方案(全局using指令在c#7.3中不可用)(CAD—C#二次开发入门)

如图&#xff0c;所示&#xff0c;全局引用global using出现报错&#xff1a; 解决方案如下&#xff1a; 新建一个类库&#xff0c;standard2.0版本。不要选.netframework 首先vs右下角更新vs版本 打开项目所在文件夹 找到项目文件.csproj&#xff0c;记事本打开。属性组位置加…

Go语言开发环境搭建

文档说明 本文作者:SwBack 创作时间:2022‎年‎6‎月‎8‎日 ‏‎18:46:21 知乎:https://www.zhihu.com/people/back-88-87 CSDN:https://blog.csdn.net/qq_30817059 百度搜索: SwBack系统: Windows 11 go 1.18.2 安装包下载 安装包下载链接 直接默认NEXT 查看Go版本 查看Go…

Coppelia Sim (v-REP)仿真 机器人3D相机手眼标定与实时视觉追踪 (二)

coppelia sim[V-REP]仿真实现 机器人于3D相机手眼标定与实时视觉追踪 二 zmq API接口python调用python获取3D相机的数据获取彩色相机的数据获取深度相机的数据用matpolit显示 python控制机器人运动直接控制轴的位置用IK运动学直接移动到末端姿态 相机内参的标定记录拍照点的位置…

Java面向对象编程高阶(一)

Java面向对象编程高阶&#xff08;一&#xff09; 一、关键字static1、static修饰属性2、静态变量与实例变量的对比3、static修饰方法4、什么时候将属性声明为静态的&#xff1f;5、什么时候将属性声明为静态的&#xff1f;6、代码演示 一、关键字static static用来修饰的结构…

Javaee---多线程(一)

文章目录 1.线程的概念2.休眠里面的异常处理3.实现runnable接口4.匿名内部类子类创建线程5.匿名内部类接口创建线程6.基于lambda表达式进行线程创建7.关于Thread的其他的使用方法7.1线程的名字7.2设置为前台线程7.3判断线程是否存活 8.创建线程方法总结9.start方法10.终止&…

VAE中的“变分”什么

写在前面 VAE&#xff08;Variational Autoencoder&#xff09;&#xff0c;中文译为变分自编码器。其中AE&#xff08;Autoencoder&#xff09;很好理解。那“变分”指的是什么呢?—其实是“变分推断”。变分推断主要用在VAE的损失函数中&#xff0c;那变分推断是什么&#x…

MobileNetV2实现实时口罩检测tensorflow

项目源码获取方式见文章末尾&#xff01; 回复暗号&#xff1a;13&#xff0c;免费获取600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 **《------往期经典推荐------》**项目名称 1.【Informer模型复现项目实战】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【…

著名AI人工智能的未来应用讲师培训师唐兴通数字经济大数据工业4.0数字化转型AIGC大模型培训讲师

《大数据与人工智能的未来应用》培训课程大纲 一、培训内容简介 本课程旨在帮助学员深度理解大数据与人工智能&#xff08;AI&#xff09;如何为未来商业和行业带来革命性变革。课程紧贴前沿科技&#xff0c;从数据采集、分析到AI应用开发&#xff0c;全方位解析大数据和AI如…

51c~目标检测~合集2

我自己的原文哦~ https://blog.51cto.com/whaosoft/12377509 一、总结 这里概述了基于深度学习的目标检测器的最新发展。同时&#xff0c;还提供了目标检测任务的基准数据集和评估指标的简要概述&#xff0c;以及在识别任务中使用的一些高性能基础架构&#xff0c;其还涵盖了…

Docker | images镜像的常用命令总结

命令总结 1. 帮助启动类命令基本命令systemctl status dockerdocker infodocker --help 2. 镜像命令docker images删除镜像出现错误 docker searchdocker pull xxx[:TAG]docker images -adocker images -qdocker system dfdocker rmi -f xxxxxdocker rmi -f $(docker images -q…

Qt 学习第十四天:线程与多线程

1024程序员快乐&#xff0c;如果这博客让你学习到了知识&#xff0c;请给我一个免费的赞❤️ 父子线程演示 一、创建界面文件 LCDnumber 二、创建mythread类&#xff0c;继承QObject 三、在MyThread.h文件做修改&#xff0c;并且加上函数声明 引入头文件&#xff0c;改变继…

实战:大数据冷热分析

实战&#xff1a;大数据冷热分析 冷热分析&#xff08;Hot and Cold Data Analysis&#xff09;的目的主要在于优化存储系统的性能和成本。通过识别并区分访问频率和存储需求不同的数据&#xff0c;可以采取适当的存储策略&#xff0c;进而提高系统的效率和用户体验。终极目的…

javaScript整数反转

function _reverse(number) { // 补全代码 return (number ).split().reverse().join(); } number &#xff1a;首先&#xff0c;将数字 number 转换为字符串。在 JavaScript 中&#xff0c;当你将一个数字与一个字符串相加时&#xff0c;JavaScript 会自动将数字转换为字符串…

PyTorch中如何进行向量微分、矩阵微分、计算雅各比行列式

文章目录 摘要Abstract 一、计算雅各比行列式二、向量微分三、矩阵微分总结 摘要 本文介绍了在PyTorch中进行向量微分、矩阵微分以及计算雅各比行列式的方法。通过对自动微分&#xff08;Autograd&#xff09;功能的讲解&#xff0c;展示了如何轻松实现复杂的数学运算&#xf…

代码编辑组件

代码编辑组件 文章说明核心代码运行演示源码下载 文章说明 拖了很久&#xff0c;总算是自己写了一个简单的代码编辑组件&#xff0c;虽然还有不少的bug&#xff0c;真的很难写&#xff0c;在写的过程中感觉自己的前端技术根本不够用&#xff0c;好像总是方案不够好&#xff1b;…

Flux 开源替代,他来了——Liberflux

LibreFLUX 是 FLUX.1-schnell 的 Apache 2.0 版本&#xff0c;它提供完整的 T5 上下文长度&#xff0c;使用注意力屏蔽&#xff0c;恢复了无分类器引导&#xff0c;并完全删除了 FLUX 美学微调/DPO 的大部分内容。 这意味着它比基本通量要难看得多&#xff0c;但它有可能更容易…

数据结构与算法汇总整理篇——数组与字符串双指针与滑动窗口的联系学习及框架思考

数组 数组精髓&#xff1a;循环不变量原则 数组是存放在连续内存空间上的相同类型数据的集合&#xff0c;通过索引(下标)访问元素&#xff0c;索引从0开始 随机访问快(O(1)时间复杂度)&#xff1b;插入删除慢(需要移动元素)&#xff1b;长度固定(部分语言中可动态调整) 其存…

解决电脑突然没有声音

问题描述&#xff1a;电脑突然没有声音了&#xff0c;最近没有怎么动过系统&#xff0c;没有安装或者卸载过什么软件&#xff0c;也没有安装或者卸载过驱动程序&#xff0c;怎么就没有声音了呢&#xff1f; 问题分析&#xff1a;仔细观察&#xff0c;虽然音量按钮那边看不到什…

索引的使用以及使用索引优化sql

索引就是一种快速查询和检索数据的数据结构&#xff0c;mysql中的索引结构有&#xff1a;B树和Hash。 索引的作用就相当于目录的作用&#xff0c;我么只需先去目录里面查找字的位置&#xff0c;然后回家诶翻到那一页就行了&#xff0c;这样查找非常快&#xff0c; 一、索引的使…