小小的 float,藏着大大的学问

数据解析-四字节十六进制数转化为浮点数 一、 数据接收并整合 在数据接收时,一些信息可能是用好几个字符来表示,那么需要用一个变量把这些字符整合起来。 下面展示一些 内联代码片。 // A code block uint32_t buffer; var foo = 'bar'; // An highlighted block for(int m=0;m<=Num-1;m++) { buffer=DataBuffer[X]|DataBuffer[X+1]<<8|DataBuffer[X+2]<<16|Da 阅读详情

点击上方蓝色小字,关注“AI派”

重磅干货,第一时间送达

来源:小林coding

AI派在读学生小姐姐Beyonce

Java实战项目练习群

长按识别下方二维码,按需求添加

扫码添加Beyonce小姐姐

扫码关注

进Java学习大礼包

前言

今天,我们来思考几个问题:

  • 为什么负数要用补码表示?

  • 十进制小数怎么转成二进制?

  • 计算机是怎么存小数的?

  • 0.1 + 0.2 == 0.3 吗?

  • …

别看这些问题都看似简单,但是其实还是有点东西的这些问题。


正文

为什么负数要用补码表示?

十进制转换二进制的方法相信大家都熟能生巧了,如果你说你还不知道,我觉得你还是太谦虚,可能你只是忘记了,即使你真的忘记了,不怕,贴心的小林在和你一起回忆一下。

十进制数转二进制采用的是除 2 取余法,比如数字 8 转二进制的过程如下图:

接着,我们看看「整数类型」的数字在计算机的存储方式,这其实很简单,也很直观,就是将十进制的数字转换成二进制即可。

我们以 int 类型的数字作为例子,int 类型是 32 位的,其中最高位是作为「符号标志位」,正数的符号位是 0,负数的符号位是 1,剩余的 31 位则表示二进制数据。

那么,对于 int 类型的数字 1 的二进制数表示如下:

而负数就比较特殊了点,负数在计算机中是以「补码」表示的,所谓的补码就是把正数的二进制全部取反再加 1,比如 -1 的二进制是把数字 1 的二进制取反后再加 1,如下图:

不知道你有没有想过,为什么计算机要用补码的方式来表示负数?在回答这个问题前,我们假设不用补码的方式来表示负数,而只是把最高位的符号标志位变为 1 表示负数,如下图过程:

如果采用这种方式来表示负数的二进制的话,试想一下 -2 + 1 的运算过程,如下图:

按道理,-2 + 1 = -1,但是上面的运算过程中得到结果却是 -3,所可以发现,这种负数的表示方式是不能用常规的加法来计算了,就需要特殊处理,要先判断数字是否为负数,如果是负数就要把加法操作变成减法操作才可以得到正确对结果。

到这里,我们就可以回答前面提到的「负数为什么要用补码方式来表示」的问题了。

如果负数不是使用补码的方式表示,则在做基本对加减法运算的时候,还需要多一步操作来判断是否为负数,如果为负数,还得把加法反转成减法,或者把减法反转成加法,这就非常不好了,毕竟加减法运算在计算机里是很常使用的,所以为了性能考虑,应该要尽量简化这个运算过程。

而用了补码的表示方式,对于负数的加减法操作,实际上是和正数加减法操作一样的。你可以看到下图,用补码表示的负数在运算 -2 + 1 过程的时候,其结果是正确的:


十进制小数与二进制的转换

好了,整数十进制转二进制我们知道了,接下来看看小数是怎么转二进制的,小数部分的转换不同于整数部分,它采用的是乘 2 取整法,将十进制中的小数部分乘以 2 作为二进制的一位,然后继续取小数部分乘以 2 作为下一位,直到不存在小数为止。

话不多说,我们就以 8.625 转二进制作为例子,直接上图:

最后把「整数部分 + 小数部分」结合在一起后,其结果就是 1000.101。

但是,并不是所有小数都可以用二进制表示,前面提到的 0.625 小数是一个特例,刚好通过乘 2 取整法的方式完整的转换成二进制,如果我们用相同的方式,来把 0.1 转换成二进制,过程如下:

可以发现,0.1 的二进制表示是无限循环的,由于计算机的资源是有限的,所以是没办法用二进制精确的表示 0.1,只能用「近似值」来表示,就是在有限的精度情况下,最大化接近 0.1 的二进制数,于是就会造成精度缺失的情况。

对于二进制小数转十进制时,需要注意一点,小数点后面的指数幂是负数,比如二进制 0.1 转成十进制就是 2^(-1),也就是十进制 0.5,二进制 0.01 转成十进制就是 2^-2,也就是十进制 0.25,以此类推。

举个例子,二进制 1010.101 转十进制的过程,如下图:


计算机是怎么存小数的?

1000.101 这种二进制小数是「定点数」形式,代表着小数点是定死的,不能移动,如果你移动了它的小数点,这个数就变了, 就不再是它原来的值了。

然而,计算机并不是这样存储的小数的,计算机存储小数的采用的是浮点数,名字里的「浮点」表示小数点是可以浮动的,比如 1000.101 这个二进制数,可以表示成 1.000101 x 2^(-3),类似于数学上的科学记数法。

既然提到了科学计数法,我再帮大家复习一下,比如有个很大的十进制数 1230000,我们可以也可以表示成 1.23 x 10^6,这种方式就称为科学记数法,该方法在小数点左边只有一个数字,而且把这种整数部分没有前导 0 的数字称为规格化,比如 1.0 x 10^(-9) 是规格化的科学记数法,而 0.1 x 10^(-9) 和 10.0 x 10^(-9) 就不是了。

因此,如果二进制要用到科学记数法,同时要规范化,那么不仅要保证基数为 2,还要保证小数点左侧只有 1 位,而且必须为 1,所以通常将 1000.101 这种二进制数,表示成 1.000101 x 2^(-3),其中,最为关键的是 000101 和 -3 这两个东西,它就可以包含了这个二进制小数的所有信息,000101 称为尾数,即小数点后面的数字,-3 称为指数,指定了小数点在数据中的位置。

现在绝大多数计算机使用的浮点数,一般采用的是 IEEE 制定的国际标准,这种标准形式如下图:

这三个重要部分的意义如下:

  • 符号位:表示数字是正数还是负数,为 0 表示正数,为 1 表示负数;

  • 指数位:指定了小数点在数据中的位置,指数可以是负数,也可以是正数,指数位的长度越长则数值的表达范围就越大;

  • 尾数位:小数点右侧的数字,也就是小数部分,比如二进制 1.0011 x 2^(-2),尾数部分就是 0011,而且尾数的长度决定了这个数的精度,因此如果要表示精度更高的小数,则就要提高尾数位的长度;

用 32 位来表示的浮点数,则称为单精度浮点数,也就是我们编程语言中的 float 变量,而用 64 位来表示的浮点数,称为双精度浮点数,也就是 double 变量,它们的结构如下:

可以看到:

  • double 的尾数部分是 52 位,float 的尾数部分是 23 位,由于同时都带有一个固定隐含位(这个后面会说),所以 double 有 53 个二进制有效位,float 有 24 个二进制有效位,所以所以它们的精度在十进制中分别是 log10(2^53) 约等于 15.95 和 log10(2^24)约等于 7.22 位,因此 double 的有效数字是 15~16 位,float 的有效数字是 7~8位,这些是有效位是包含整数部分和小数部分;

  • double 的指数部分是 11 位,而 float 的指数位是 8 位,意味着 double 相比 float 能表示更大的数值范围;

那二进制小数,是如何转换成二进制浮点数的呢?我们就以 10.625 作为例子,看看这个数字在 float 里是如何存储的。

首先,我们计算出 10.625 的二进制小数为 1010.101,然后把小数点,移动到第一个有效数字后面,即将 1010.101 右移 3 位成 1.010101,右移 3 位就代表 +3,左移 3 位就是 -3,float 中的「指数位」就跟这里移动的位数有关系,把移动的位数再加上「偏移量」,float 的话偏移量是 127,相加后就是指数位的值了,即指数位这 8 位存的是 10000010(十进制 130),因此你可以认为「指数位」相当于指明了小数点在数据中的位置。

1.010101 这小数点右侧的数字就是 float 里的「尾数位」,由于尾数位是 23 位,则后面要补充 0,所以最终尾数位存储的数字是 01010100000000000000000。

在算指数的时候,你可能会有疑问为什么要加上偏移量呢?

前面也提到,指数可能是正数,也可能是负数,即指数是有符号的整数,而有符号整数的计算是比无符号整数麻烦的,所以为了减少不必要的麻烦,在实际存储指数的时候,需要把指数转换成无符号整数,float 的指数部分是 8 位,IEEE 标准规定单精度浮点的指数取值范围是 -127 ~ +128,于是为了把指数转换成无符号整数,就要加个偏移量,比如 float 的指数偏移量是 127,这样指数就不会出现负数了。

比如,指数如果是 8,则实际存储的指数是 8 + 127 = 135,即把 135 转换为二进制之后再存储,而当我们需要计算实际的十进制数的时候,再把指数减去偏移量即可。

细心的朋友肯定发现,移动后的小数点左侧的有效位(即 1)消失了,它并没有存储到 float 里,这是因为 IEEE 标准规定,二进制浮点数的小数点左侧只能有 1 位,并且还只能是 1,既然这一位永远都是 1,那就可以不用存起来了,于是就让 23 位尾数只存储小数部分,电路在计算时会自动把这个 1 加上,这样就可以节约 1 位的空间,尾数就能多存一位小数,相应的精度就更高了一点。

那么,对于我们在从 float 的二进制浮点数转换成十进制时,要考虑到这个隐含的 1,转换公式如下:

举个例子,我们把下图这个 float 的数据转换成十进制,过程如下:


0.1 + 0.2 == 0.3 ?

前面提到过,并不是所有小数都可以用「完整」的二进制来表示的,比如十进制 0.1 在转换成二进制小数的时候,是一串无限循环的二进制数,计算机是无法表达无限循环的二进制数的,毕竟计算机的资源是有限。

因此,计算机只能用「近似值」来表示该二进制,那么意味着计算机存放的小数可能不是一个真实值,现在基本都是用 IEEE 754 规范的单精度浮点类型或双精度浮点类型来存储小数的,根据精度的不同,近似值也会不同。

那计算机是存储 0.1 是一个怎么样的二进制浮点数呢?偷个懒,我就不自己手动算了,可以使用 binaryconvert 这个工具,将十进制 0.1 小数转换成 float 浮点数:

可以看到,8 位指数部分是 01111011,23 位的尾数部分是 10011001100110011001101,可以看到尾数部分是 0011 是一直循环的,只不过尾数是有长度限制的,所以只会显示一部分,所以是一个近似值,精度十分有限。

接下来,我们看看 0.2 的 float 浮点数:

可以看到,8 位指数部分是 01111100,稍微和 0.1 的指数不同,23 位的尾数部分是 10011001100110011001101 和 0.1 的尾数部分是相同的,也是一个近似值。

0.1 的二进制浮点数转换成十进制的结果是 0.100000001490116119384765625:

0.2 的二进制浮点数转换成十进制的结果是 0.20000000298023223876953125:

这两个结果相加就是 0.300000004470348358154296875:

所以,你会看到在计算机中 0.1 + 0.2 并不等于完整的 0.3,这主要是因为有的小数无法可以用「完整」的二进制来表示,所以计算机里只能采用近似数的方式来保存,那两个近似数相加,得到的必然也是一个近似数。

我们在 JavaScript 里执行 0.1 + 0.2,你会得到下面这个结果:

结果和我们前面推到的类似,因为 JavaScript 对于数字都是使用 IEEE 754 标准下的双精度浮点类型来存储的,而我们二进制只能精准表达 2 除尽的数字 1/2, 1/4, 1/8,但是例如 0.1(1/10) 和 0.2(1/5),在二进制中都无法精准表示时,需要根据精度舍入。

我们人类熟悉的十进制运算系统,可以精准表达 2 和 5 除尽的数字,例如1/2, 1/4, 1/5(0.2), 1/8, 1/10(0.1)。当然,十进制也有无法除尽的地方,例如 1/3, 1/7,也需要根据精度舍入。


总结

最后,再来回答开头多问题。

为什么负数要用补码表示?

负数之所以用补码的方式来表示,主要是为了统一和正数的加减法操作一样,毕竟数字的加减法是很常用的一个操作,就不要搞特殊化,尽量以统一的方式来运算。

十进制小数怎么转成二进制?

十进制整数转二进制使用的是「除 2 取余法」,十进制小数使用的是「乘 2 取整法」。

计算机是怎么存小数的?

计算机是以浮点数的形式存储小数的,大多数计算机都是 IEEE 754 标准定义的浮点数格式,包含三个部分:

  • 符号位:表示数字是正数还是负数,为 0 表示正数,为 1 表示负数;

  • 指数位:指定了小数点在数据中的位置,指数可以是负数,也可以是正数,指数位的长度越长则数值的表达范围就越大;

  • 尾数位:小数点右侧的数字,也就是小数部分,比如二进制 1.0011 x 2^(-2),尾数部分就是 0011,而且尾数的长度决定了这个数的精度,因此如果要表示精度更高的小数,则就要提高尾数位的长度;

用 32 位来表示的浮点数,则称为单精度浮点数,也就是我们编程语言中的 float 变量,而用 64 位来表示的浮点数,称为双精度浮点数,也就是 double 变量。

0.1 + 0.2 == 0.3 吗?

不是的,0.1 和 0.2 这两个数字用二进制表达会是一个一直循环的二进制数,比如 0.1 的二进制表示为 0.0 0011 0011 0011… (0011 无限循环),对于计算机而言,0.1 无法精确表达,这是浮点数计算造成精度损失的根源。

因此,计算机只能用「近似值」来表示该二进制,那么意味着计算机存放的小数可能不是一个真实值。

0.1 + 0.2 并不等于完整的 0.3,这主要是因为这两个小数无法用「完整」的二进制来表示,所以计算机里只能采用近似数的方式来保存,那两个近似数相加,得到的必然也是一个近似数。

文末福利

各位猿们,还在为记不住API发愁吗,哈哈哈,最近发现了国外大师整理了一份Python代码速查表和Pycharm快捷键sheet,火爆国外,这里分享给大家。

这个是一份Python代码速查表

下面的宝藏图片是2张(windows && Mac)高清的PyCharm快捷键一览图

怎样获取呢?可以添加我们的AI派团队的Beyonce小姐姐

一定要备注【高清图】哦

????????????????????

➕我们的Beyonce小姐姐微信要记得备注【高清图】哦

来都来了,喜欢的话就请分享、点赞、在看三连再走吧~~~

阿里+头条+腾讯等大厂Java笔试题目分享,java面试问到项目难点 既已说到spring cloud alibaba,那对于整个微服务架构,如果想要进一步地向上提升自己,到底应该掌握哪些核心技能呢?就个人而言,对于整个微服务架构,像RPC、Dubbo、Spring Boot、Spring Cloud Alibaba、Docker、kubernetes、Spring Cloud Netflix、Service Mesh等这些都是最最核心的知识,架构师必经之路!下图,是自绘的微服务架构路线体系大纲,如果有还不知道自己该掌握些啥技术的朋友,可根据小编手绘的大纲进行一个参考。 阅读详情

相关推荐

C语言之float

现实项目中,float经常被人们常用到,例如:金融和数学的应用,这是必不可少的。那么具体的float介绍,这里就不多写了,如果想了解的话,访问该网址:https://baike.baidu.com/item/FLOAT/19167524?fr=aladdin ,如果在网上查看资料就可以发现,在C的标准规定中,float类型中最少有6位有效数字,取值的范围为10负37次方到10正37次方。 (...

覃庆奖 5783

UE4 蓝图保留小数点后几位

ToText 蓝图节点 下面为保留小数点后6位,没有6位时补0 得看点C++了,蓝图找了半天,国内UE4帖子真的赶不上unity的多...

Deveuper的博客 1万+

Rider高效调试UE引擎:无需编译源码的符号配置指南

本文提供了一份详尽的Rider高效调试UE引擎指南,核心在于无需编译源码即可配置调试符号。通过Epic启动器下载官方PDB文件,并在Rider中正确配置外部符号服务器路径,开发者能在10分钟内实现对引擎内部代码(如AActor::Tick)的源码级断点调试、变量查看和调用堆栈分析,极大提升问题排查效率。

weixin_29011239的博客 342

ue4 float保留小数点后几位_小小的 float,藏着大大的学问

前言今天,我们来思考几个问题:为什么负数要用补码表示?十进制小数怎么转成二进制?计算机是怎么存小数的?0.1 + 0.2 == 0.3 吗?…别看这些问题都看似简单,但是其实还是有点东西的这些问题。正文为什么负数要用补码表示?十进制转换二进制的方法相信大家都熟能生巧了,如果你说你还不知道,我觉得你还是太谦虚,可能你只是忘记了,即使你真的忘记了,不怕,贴心的小林在和你一起回忆一下。十进制数...

weixin_39929635的博客 6717

基因组研究之单倍型T2T基因组(一)

单倍型T2T基因组(Haplotype-resolved T2T genome)是一种高精度、高连续性、高完整性的基因组组装技术,它能够提供从端粒到端粒的完整基因组序列,包括所有的基因和非编码序列。完整覆盖:T2T基因组覆盖从端粒到端粒的染色体序列,包含所有的基因和非编码序列,包括以往难以解析的端粒和着丝粒区域。单倍型解析:单倍型T2T基因组能够区分来自父母本的遗传信息,进行亚基因组不对称演化研究,挖掘单倍型等位基因间的表达差异,这对于重测序、性状定位、进化、基因功能、基因编辑等研究至关重要。

2401_89507557的博客 2440

Matt Pocock Skills — AI 编码代理技能包介绍与使用指南

《Matt Pocock Skills:AI编码代理技能包指南》 摘要: Matt Pocock Skills是一套开源AI编码代理技能包,旨在解决AI辅助开发中的四大痛点:需求理解偏差、token浪费、代码质量差和架构腐化。该技能包包含多种实用工具:/grill-with-docs用于需求对齐,/tdd实现测试驱动开发,/diagnose提供规范化调试流程,/triage管理issue生命周期。核心思想包括:通过拷问式对齐确保需求理解一致,建立共享领域语言提高沟通效率,快速反馈闭环加速开发,以及持续架构维

qq_45859163的博客 2224

十六进制与浮点数的互相转换

十六进制与浮点数的互相转换 第一部分: 关于16进制浮点数 对于大小为32-bit的浮点数(32-bit为单精度,64-bit浮点数为双精度,80-bit为扩展精度浮点数), 1、其第31 bit为符号位,为0则表示正数,反之为复数,其读数值用s表示; 2、第30~23 bit为幂数,其读数值用e表示; 3、第22~0 bit共23 bit作为系数,视为二进制纯小数,假定该小数的十进制值为x; 则按照规定,该浮点数的值用十进制表示为: = (-1)^s * (1 + x) * 2^(e - 127) 对于4

dbl240906551的博客 3万+

Pytorch.nn.Linear 解析(数学角度)

pytorch.nn.Linear 是一个类,下面是它的一些初始化参数 in_features : 输入样本的张量大小 out_features : 输出样本的张量大小 bias : 偏置 它主要是对输入数据做一个线性变换。 y=xAT+b y=xA^T+b y=xAT+b 这里A是权重矩阵,b是偏置。他们都是根据 in_features 生成 测试代码: m = torch.nn.Linea...

Medlen 1万+

彻底搞懂float16与float32的计算方式

1 float 16与float 32 1.1 float16 1.1.1 计算方式 float 16又称半精度, 用16个比特也就是2个字节表示一个数。 如下图所示, 其中1位符号位, 5位指数位, 10位小数位。 那么, 这16个比特位是怎么表示1个数的呢 ? 分3部分:符号位 , 指数部分, 小数部分。 a 符号位: 1代表负数, 0代表正数。 b 指数部分,5个比特位, 全0和全1有特殊用途,所以是00001~11110, 也就是1到30, 减去偏置15,指数部分最终范围为-14 ~15. c 小

6万+

YOLOv12涨点优化:自研检测头 | 独家创新(Partial_C_v12Detect)检测头结构创新,实现涨点

现有12Detect进行二次创新,提升检测精度,独家创新(Partial_C_12Detect)检测头结构创新,适合科研创新度十足,强烈推荐

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 633

【数据分析】R语言分段结构方程模型手把手教程(Piecewise Structural Equation Model)

分段结构方程模型(Piecewise Structural Equation Model, SEM)是一种用于分析变量之间因果关系的统计方法。它通过将复杂的因果关系分解为多个简单的线性模型来评估变量之间的直接和间接效应。与传统的结构方程模型(SEM)不同,分段结构方程模型不需要假设数据的多变量正态分布,因此在处理非正态数据时更为灵活。

专注生信领域 2652

c语言里面的float是什么意思

C语言中float浮点型数据类型,FLOAT数据类型用于存储单精度浮点数或双精度浮点数。 1、float的作用: FLOAT 数据类型用于存储单精度浮点数或双精度浮点数,浮点数使用 IEEE(电气和电子工程师协会)格式。 浮点类型的单精度值具有 4 个字节,包括一个符号位、一个 8 位 excess-127 二进制指数和一个 23 位尾数,尾数表示一个介于 1.0 和 2.0 之间的数,由于尾数的...

m1ssyAn的博客 10万+

AI故障预测系统架构设计:5个核心模块+3种主流架构,收藏这篇就够了

深夜11点,某汽车工厂的生产线突然停机——核心机器人的轴承磨损过度导致卡壳。维修人员连夜抢修,直接损失超过50万元,还延误了客户的交货期。传统的“事后维修”或“定期维护”要么代价高昂,要么防不胜防。AI故障预测系统的出现,让“精准维护”成为可能——它能通过传感器数据提前7-30天预警故障,将停机损失降低80%以上。知道要做故障预测,却不知道怎么搭系统——数据怎么采集?特征怎么提取?模型怎么部署?架构怎么选?本文将解决这些问题:我们会拆解AI故障预测系统的5个核心模块,分析3种主流架构。

AIGC应用创新大全的博客 1020

Python中float类型、float32类型和float64类型的表示精度,所需内存及其之间的转换

1. ‘float’转’float64’ xxx原本是’float’类型的 x = np.float64(x) 经过上面的xxx就变成了’float64’类型 2.’float64’转‘float’ yyy原本是’float64’类型的 y = np.float(y) 经过上面的yyy就变成了’float’类型 3. 当出现如下错误时需要进行类型的转换 ValueError: Unknown label type: 'unknown' ...

comli_cn的博客 5万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

float32与float64

bit, bytes与word bit即比特位,是最小一级的信息单位; byte即字节,是计算机存储容量的计量单位,1 byte=8 bits; word指计算机字,简称字。在存储器中,通常每个单元存储一个字。因此每个字都是可以寻址的。字的长度用位数来表示,计算机的每个字所包含的位数称为字长,计算的字长是指它一次可处理的二进制数字的数目。一般地,大型计算机的字长为32-64位。 常用的字节单位: KB(Kilobyte) MB(Megabyte) GB(Gigabyte) TB(Trillionbyte)

linkequa的博客 9758

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

float32转float16

可以看到移动位数=exponent-15= -2, 所以fraction的小数点需要往左浮动2位,fraction就编程了0.010101010101,计算结果为pow(2, -2) + pow(2, -4) + pow(2, -6)+pow(2, -8) + pow(2, -10)+ pow(2, -12) ≈ 0.333252。流程就把fp32的整数部分转为二进制,小数部分转为二进制,算出小数点浮动的位置。可以知道往左浮动了2位,所以exponent=13, 对应二进制为01101。

feng__shuai的博客 8071

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

c语言中怎么使用float,float在c语言中怎么用

C语言中printf输出float和double都用%f么(scanf又 1.C语言中printf输出float和double都可以用%f,而double型数据还可以用%lf。 2.scanf当中若是对双精度的变量赋值是必须是%后跟lf,而printf当中可以用%f也可以用%lf没有限制。 拓展资料: c语言中的格式控制符: %d十进制有符号整数 %u十进一直觉得女王才能真正得到幸福,因为人生是自...

weixin_39936403的博客 5万+

Tensorflow中float32模型强制转为float16半浮点模型

i在Tensorflow框架训练完成后,部署模型时希望对模型进行压缩。一种方案是前面文字介绍的方法《【Ubuntu】Tensorflow对训练后的模型做8位(uint8)量化转换》。另一种方法是半浮点量化,今天我们主要介绍如何通过修改Tensorflow的pb文件中的计算节点和常量(const),将float32数据类型的模型大小压缩减半为float16数据类型的模型。

huachao1001的专栏 4914

来自张鑫旭大大的《css世界》学习笔记--- about float

6.1 float的本质与特性 浮动的本质是为了实现文字环绕效果 float特性: 包裹性(eg:父元素宽200px,子元素为宽128px的图片,此时表现出包裹;子元素宽超过200px,则自适应父元素宽度,最终为200px)(包裹自适应两部分组成) 块状化并格式化上下文(块状化:一旦float属性值不为none,其display计算值为block或者table) 破坏文档流 没有任何m...

198

Oracle中float类型

项目中Oracle数据库存储金额用的float类型,金额都是只有2位小数。但是在plsql查看表结构时,类型中没有float类型,都是float(b)类型。有什么区别呢? 作如下实验: create table MY_TEST ( num1 FLOAT(2), num2 FLOAT(10), num3 FLOAT, num4 NUMBER ); insert into my_...

努力做一名优秀的程序员 1万+

从头在学Java系列之float和Float类的区别及Float源码分析

float和Float类的区别及一点点FLoat类的源码,这个可能不是很常用

weixin_44750790的博客 3406

float

float浮动 float 属性定义元素在哪个方向浮动,浮动元素会生成一个块级框,直到该块级框的外边缘碰到包含框或者其他的浮动框为止。 Float(浮动),往往是用于图像,但它在布局时一样非常有用 left right none inherit 特性:加浮动的元素,会脱离文档流,会延迟父容器靠左或靠右排列,如果之前已经有浮动的元素,会挨着浮动的元素进行排列。 <!DOCTYPE html> <html lang="en"> <head> <meta cha

weixin_46048542的博客 9417
上一篇: 卧槽!微信头像可以带圣诞帽啦!
下一篇: 超酷!Python 绘制属于你的世界地图
Wang_AI
博客等级 码龄12年 996粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值