计算机系统#5为什么浮点数运算不精确?(阿里笔试)最近在公众号阿里技术上看到一套孤尽老师出的10道Java测试题(

计算机系统是程序员的知识体系中最基础的理论知识,你越早掌握这些知识,你就能越早享受知识带来的"复利效应"。

你会发现前者的结果是0.30000000000000004,而后者的结果是0.3(当然了!)。那么,为什么计算机的准确度,连普通的电子计算器的都比不上?关键在于计算机与计算器使用了不同的数据表示方法。

对于整数来说,大家都知道8位有符号整数可以表示[-128,127],8位无符号整数可以表示[0,255],不管怎么样,8位二进制无论如何也只能表示256个整数。当需要表示257这个数,有且只有两个办法:

同理,我们把问题域扩展到全体实数,8位二进制同样也只能表示256个实数。假如约定这样一种8位编码:最低两位为小数区域,其余是整数区域,这样就有:

实数有两种表示格式,分别是定点数和浮点数。像上面说的这种约定整数部分和小数部分为固定位置的格式,就是定点数表示。

一个虚数上相当于两个实数,所以我们只需要关心实数在计算机中的表示即可,将一个实数装载入计算机需要分为三个步骤:

2.5.1转换为二进制数格式

这个步骤可能损失精度,换句话说,有些数会损失精度,而有些数不会,这取决于表示这个数需要的信息量和浮点数的存储格式

事实上,在0.1到0.9的9个小数中,只有0.5可以用二进制精确的表示。怎么理解呢?我们把1想象成一个圆,在十进制里,它可以划分为10等分;但在二进制里,它只能划分为2等分。也就是说二进制里一位,要么表示0,要么表示一半,它没有办法像十进制那样表示3/10、4/10、6/10......1的一半在十进制里是什么?0.5,所以二进制可以精确表示0.5,任何包含因子5的数都可以用二进制精确表示。无法精确表示的数字,存储值只能是真实值的近似表示。

提示:类似地,思考下十进制数格式可以精确表示1/3吗?

2.5.2转换为二进制科学计数法表示

2.5.3转换为IEEE754标准格式

IEEE754严格规定了尾数域和指数域可表示的大小,位数有限,意味着信息量是有限的。有些数需要的二进制数据量巨大,在这个步骤自然会损失精度,具体如下:

IEEE二进制浮点数算术标准(IEEE754)是广泛使用的浮点数运算标准,是大多数高级语言的现行浮点运算标准,例如C/C++、Java、JavaScript等。

对于一个科学计数法表示,当尾数a的整数部分有且仅有一位有效数字时,我们称它是规格化的。由于0在数字的最左边是无效的,而在二进制的世界里只有0和1,因此,二进制数使用规格化的科学计数法时,整数部分固定为1。

既然整数部分1是固定的,那么就没有必要存储整数部分的信息了。正因如此,IEEE754标准的浮点数采用隐藏位的策略,整数部分的1是隐含的,不需要占用一位比特,这样是使得尾数可以多一位有效数。

现在,我们已经知道浮点数划分的三个区域,现在我们来看这三个区域是如何求值的:

前面讲的是IEEE754浮点数的一般格式,其中最常用的是32位单精度浮点数和64位双精度浮点数,在高级语言中通常代表float和double两种数据类型(例如C/C++、Java),在有些语言中只有一种数字格式number(例如JavaScript/TypeScript)。

在IEEE754标准规定指数区域全0或全1为特殊值,具体如下:

为什么0.1+0.2!=0.3呢?首先,0.1和0.2这两个实数无法用二进制精确表示。在二进制的世界里,只有包含因子5的十进制数才有可能精确表示,而0.1和0.2转换为二进制后是无限循环小数,在计算机中存储的值只能是真实值的近似表示,这里是第一次精度丢失;其次,计算机浮点数采用了IEEE754标准格式,IEEE754严格规定了尾数域和指数域可表示的大小,位数有限,意味着可表示的信息量是有限的,换句话说就会存在三种误差:上溢、下溢和舍入误差。而0.1+0.2的结果的尾数域部分刚好超过了尾数域位数,超过位数的部分舍去,存在舍入误差,这里是第二次精度丢失。

计算机系统系列完整目录如下(2023/07/11更新):

永远相信美好的事情即将发生,欢迎加入小彭的Android交流社群~

THE END
1.在现代检测技术中,测量的相对误差用什么符号表示问答中心δ=△/Lx100% 式中: δ—实际相对误差 △—绝对误差 L—真值 相对误差指的是测量所造成的 绝对误差与 被测量〔约定〕真值之比乘以100%所得的数值,以 百分数表示。一般来说,相对误差更能反映测量的可信程度。设测量结果y减去被测量约定真值t,所得的误差或绝对误差为Δ。将绝对误差Δ除以约定真值t即可求得相对http://m.gaokaomanfen.com/know/1379220.html
2.《分析化学》知识点:准确度和精密度有关分析化学知识点,以下是小编整理的“《分析化学》知识点:准确度和精密度”,具体内容如下,请考生查看! 准确度和精密度: 1.准确度: 测定结果与真值接近的程度,用误差衡量; 绝对误差: 测量值与真值间的差值,用E表示E=X-XT; 相对误差: 绝对误差占真值的百分比,用Er表示: https://www.med66.com/fenxihuaxue/ha2004076012.shtml
3.准确度的常用表示方法,准确度的常用表示方法介绍准确度的常用表示方法,包括误差范围、精确度、标准差等,详细阐述各种方法的优缺点及适用场景,帮助读者更好地理解和应用。准确度, 表示方法, 误差范围, 精确度, 标准差 超级筹码(源码 主图 通达信 贴图) 以色带表示筹码的密集度:蓝色表示短筹密集,青黄色表示大量筹码沉淀,此时要密切关注股价突破方向和成交量https://www.55188.com/topics-9139679.html
4.2020.5.15福建卫生招聘考试:药学专业知识每日一练71. 在方法学中,表示准确度的是: A.相关系数 B.线性范围 C.回收率 D.检测限 E.精密度 72. 回归方程与相关系数是表示分析方法的: A.范围 B.稳定性 C.定量限 D.专属性 E.线性 73. 属于药品检验工作程序的是: A.性状,检查,含量测定,检验报告 https://fj.yixue99.com/2020/0515/16975.html
5.《卫生化学》课程教学质量标准(预防医学(妇幼保健班)专业)能够阐述常用分析方法的基本原理及适用范围。 3. 能力目标 通过本课程的学习,使学生能够对实验数据进行正确的统计处理、质量控制,以及提高分析结果的准确度;针对不同的样品,选择合适的采集原则和预处理方法;能够使用常用的分析仪器进行卫生化学实验。 【课程考核与评价】 https://www.gxtcmu.edu.cn/ggxy/jysjs1/zywsxjyshjwsxjyshs/jxyhygl12/content_29944
6.自考药物分析(二)试题浙江省2009年7月自考试卷9.准确度表示测量值与真值的差异,常用哪项反映?( ) A.RSD B.回收率 C.标准对照液 D.空白实验 10.巴比妥类药物在非水介质中酸性增强,若用非水法测定含量,常用的指示剂为( ) A.酚酞 B.甲基橙 C.麝香草酚兰 D.结晶紫 11.巴比妥类药物与银盐反应是由于结构中含有( ) https://www.hbzkw.com/exam/20090919160853.html
7.百年教育职业培训中心环境监测与仪器分析10、【单选题】以下不是大气污染物浓度的常用表示方法的是( )。 A、mg/m3 B、μg/m3 C、ppm D、g/L 11、【单选题】下面几种物质中( )是二次污染物。 A、SO2 B、CO C、硝酸盐 D、NO2 12、【单选题】《大气污染物综合排放标准》(GB16297-1996)规定的最高允许排放浓度是指( )。 https://bnjyedu.cn/pc/news_xx-4791-.html
8.人脸识别原理及算法:动态人脸识别系统研究最新章节刘翼光著在该方法中缩放处理先将人脸头部图像矩阵正交化,然后着重处理图像中的人脸区域。Pentland[51]的另外一组实验是基于大的人脸数据库,一共有3000幅人脸图像,从中识别200人的识别率达到了95%,但是在这3000幅人脸图像中部分人脸图像是非常相似的,导致样本识别效率提高,因此这一识别率不能表明该算法在样本相异时的准确度https://m.zhangyue.com/readbook/10958504/9.html?p2=1.
9.汽轮机基础知识问答发电厂中,热力生产过程的各种热工参数(如压力、温度、流量、液位、振动等)的测量方法叫热工检测,用来测量热工参数的仪表叫热工测量仪表。 94.什么叫允许误差?什么叫精确度? 根据仪表的制造质量,在国家标准中规定了各种仪表的最大误差,称为允许误差。允许误差表示为: https://www.360doc.cn/mip/1115539666.html
10.准确度表示测量值与真值的差异,常用()反映。准确度表示测量值与真值的差异,常用()反映。 A、RSD B、回收率 C、标准对照液 D、空白实验 点击查看答案进入题库练习 查答案就用赞题库小程序 还有拍照搜题 语音搜题 快来试试吧 无需下载 立即使用 你可能喜欢 单项选择题 氧瓶燃烧法破坏有机含溴/碘化物时,吸收液中加入()可将Br2或I2还原成离子。 https://m.ppkao.com/mip/tiku/shiti/2026297.html