ad

看不见的浮点数,0.1+0.2居然都算错-英雄云拓展知识分享

匿名投稿 5026 2024-04-18

说到浮点误差,有一个比较精深的计算机概念——浮点数,有兴趣的同学可以问度娘。简单说,在计算机的计算中,只能存储和处理2进制数据,就是1和0。Excel在计算时,首先要把10进制的数值转换为2进制,交给计算机处理,最后再把2进制的结果转换为10进制,显示到Excel中。

10进制数值转换为2进制数值的计算进程为:

1、整数部份

连续用该整数除以2取余数,然后用商再除以2,直到商等于0为止,最后把各个余数按相反的顺序排列。

如果将10进制数值22转换为2进制数值,其计算步骤以下:

22除以2结果为11,余数为0。

看不见的浮点数,0.1+0.2居然都算错-英雄云拓展知识分享

11除以2结果为5,余数为1。

5除以2结果为2,余数为1。

2除以2结果为1,余数为0。

1除以2结果为0,余数为1。

最后将余数按相反的顺序排列,整数22的2进制结果为10110。

2、小数部份

用2乘以10进制小数,将得到的整数部份取出,再用2乘以余下的小数部份,然后再将积的整数部份取出。如此往复,直到积中的小数部份为0或到达所要求的精度为止,最后把取出的整数部份按顺序排列。

如果将10进制数值0.8125转换为2进制数值,其计算步骤是:

首先用0.8125乘以2等于1.625,取整结果为1,小数部份是0.625。

0.625乘以2等于1.25,取整结果为1,小数部份是0.25。

0.25乘以2等于0.5,取整结果为0,小数部份是0.5。

0.5乘以2等于1.0,取整结果为1,小数部份是0,计算结束。

将乘积的取整结果顺序排列,结果就是0.1101。

3、整数和小数混合数值

含有小数的10进制数转换成2进制时,先将整数、小数部份分别进行转换,然后将转换结果相加。

但是这类转换有时候会堕入无穷循环,比如依照上述方法将小数0.6转换为2进制代码,计算结果就是:

0.10011001100110011……

其中的0011部份会无穷重复,没法用有限的空间量来表示。当结果超越Excel计算精度,产生了一个因太小而没法表示的数字时,在Excel中的处理结果就是0。

所以在不同进制之间转换时,就很容易出现一些非常细小的误差,这就是浮点误差,

Excel里的浮点由于函数机制等缘由,在某些极端情况下隐蔽性很高,所以我再写篇文章介绍下这个坑。

1,计算时产生的大量小数位数

这个结果出现大量小数位数的缘由在之前的文章里已介绍得很详细了,这里不再赘述。

2,没法录入的数据

由于浮点的问题,有些特殊数录入就可以生成浮点,致使没法录入正确内容,32768.598有兴趣你就试试在excel里录入这个数。

但是这两类浮点数,在把小数位数调高后都很容易发现异常,因此略微对Excel有一定了解的火伴都会知道用ROUND函数修正精度,但是,Excel里存在一类更危险的浮点数。

截图为至今为止这类数里至今为止测试下最简单的算式。0.1+0.2,不管如何调高小数位数还是显示为0.3,使用公式求值或F9抹黑算式检查也不会出现大量小数位数,均为0.3。等号判断下和直接键入的0.3也是相同的。

但是,如果你把这个算式用于MATCH等函数内,结果却是报错的……

由于对Excel来讲,浮点精度是可以超过15位的,可以视为高精度的浮点误差

百度后发现JS里0.1+0.2就是典型浮点误差结果为:

0.30000000000000004

由于Excel有15位精度限制,故只显示出0.3,由于15位下剩余小数位数均为0未显示出来,因此,这种情况下,这个性质说明Excel的浮点精度是可以高于15位的。

在实际测试中,发现部份函数能辨认这类高于15位的精度差异,而且这类差异会作用公式结果,这些函数包括

RANK、FREQUENCY、MATCH、MODE、VLOOKUP、MODE.MULT、HLOOKUP、LOOKUP

有好多同学已被类似0.1+0.2这类不产生大量小数位数的浮点误差坑过,由于使用F9或等号检测时都没法检测出这类高于15位的精度差异。

看到这里肯定有人会问,有无甚么函数能直接辨认这类精度差?

答案是固然有,有个DELTA函数专门判断参数是否是相等的,可以辨认出来,这个函数的结果为1,说明参数完全相等,为0则说明是有差异的:

除使用ROUND修正精度的方式外,有时候我们也能够使用像COUNTIF这类不辨认高于15位的精度的函数来解决这类数值的匹配问题,由于COUNTIF的第2参数在没有没有比较运算符和通配符等时,会将数字全部辨认为数值型统计且不会辨认高于15位的精度。

好了,今天我们的内容就是这些吧,祝各位小火伴一天好心情!


图文制作:流浪铁匠



选择英雄云云表单=选择更智能的办公工具

>>>>🚀🌟 点击注册 免费试用 更高级的-英雄云企业级云表单 🌟🚀 😃👉🌐>>>>

在现代企业管理中,数据的高效管理和处理至关重要。随着信息技术的不断发展,英雄云云表单已经成为了提高数据录入、管理和分析效率的不可或缺的工具。让我们来深入探讨英雄云-云表单的几大优势。

基础字段:多样性满足业务需求

英雄云云表单中包括了各种基础字段,如单行文本多行文本数字输入框单选框复选框下拉框下拉复选框日期时间分割线等。这些字段的多样性使用户可以根据具体的业务需求,轻松进行文本、数据和时间信息的录入或修改。例如,您可以使用单行文本字段录入员工姓名、产品型号等,或者使用下拉框进行多选,根据不同情况选择更加方便的字段类型。

高级字段:提升工作效率

英雄云云表单还提供了高级字段,如地址图片附件手写签名手机子表关联数据关联查询以及流水号。这些高级字段在基础字段的基础上升级,可帮助用户完成一些琐碎的工作。例如,使用地址字段可以避免逐字打字,而流水号字段可以自动生成规律性的编号,非常适用于合同编号生成等场景。

部门成员字段:精确管理与通讯录的关联

英雄云的部门成员字段允许企业对各个部门的成员进行精确管理。用户可以通过部门成员字段获取通讯录中的部门成员信息,应用于记录报销人、报销部门等场景。这些成员字段还细分为成员单选成员多选,可根据具体需求在通讯录中选择一个或多个成员。

聚合表:数据处理更智能

英雄云聚合表功能用于对已存在的表单数据进行聚合计算,从而得到一张聚合表,后续其他表单可调用聚合表进行数据联动、关联查询和关联数据等操作完成数据处理。这一功能可应用于多种场景,如进销存管理、财务管理和门店零售管理等,帮助企业完成数据处理,提高工作效率。

表单权限设置:灵活管理数据访问

英雄云的表单权限设置允许用户根据企业的具体需求管理表单的访问和操作权限。用户可以根据系统权限或自定义权限对不同成员或团队进行权限设置,以确保数据的安全和合规性。这一功能使企业能够根据变化的业务需求和团队结构,实时调整权限设置。

自定义打印模板:文档输出更便捷

英雄云云表单支持自定义打印模板,可将表单数据转换为可打印的Word文档。用户可以根据自己的需求进行排版和编辑,将产品规格说明书等文档轻松生成。这一功能提供了一种标准化的文档输出方式,简化了信息整理的过程。

综合来看,选择英雄云云表单意味着选择更智能、更灵活、更高效的数据管理工具。无论是提高工作效率,精确管理数据,还是实现数据处理,英雄云云表单都能满足您的多样化需求,助力您的业务发展。

如果您正在寻找一款强大的云表单工具,不妨考虑英雄云,它将为您带来更多的便捷和智能,助您事半功倍。


免责声明:

本网址(www.yingxiongyun.com)发布的材料主要源于独立创作和网友匿名投稿等来源。此处提供的所有信息仅供参考之用。我们致力于提供准确且可信的信息,但不对材料的完整性或真实性作出任何保证。用户应自行验证相关信息的正确性,并对其决策承担全部责任。对于由于信息的错误、不准确或遗漏所造成的任何损失,本网址不承担任何法律责任。本网站所展示的所有内容,如文字、图像、标志、音频、视频、软件和程序等的版权均属于原创作者。如果任何组织或个人认为网站内容可能侵犯其知识产权,或包含不准确之处,请即刻联系我们进行相应处理。

上一篇:别再把Tableau、PowerBI吹上天了,在中国根本用不起来,看看为啥-英雄云拓展知识分享
下一篇:EXCEL快捷键大全和EXCEL经常使用技能整理【105页完全版】-英雄云拓展知识分享
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×