彻底搞懂为什么计算机表达的浮点数(小数)不准确? |
您所在的位置:网站首页 › 日语翻译为什么不准确 › 彻底搞懂为什么计算机表达的浮点数(小数)不准确? |
无论任何编程语言,在表达数值的时候,都具备表达整数和小数的能力。 但是在表达小数的时候,往往不能准确的表达。举个例子,0.3这个小数,计算机就无法准确的表达。 为什么呢? 这与计算机通过硬件对数据存储的机制有关。 一、计算机如何存储和表达整数人们都说,计算机实际上很傻,他连2都不认识。只知道0和1. 存储元件,通电即为1,不通电即为0. 那么一个存储元件能表达多少种状态呢?很显然就是0和1两种状态。 如果两个存储元件排在一起,那能表达多少种状态呢?我们可以通过控制开关,实现00,01,10,11,四种状态。也就是2的2次方。 当我们有三个存储元件排在一起,那就是000,001,010,011,100,101,110,111这样8种状态,也就是2的3次方。 以此类推: N个存储元件排列在一起,就可以表达2的N次方个状态。 如果对每一个状态从0开始编号。那么就可以说,表达了0到2的N次方-1个整数了。 按照数学的方式来表达一个公式的话。那么任意的二进制数排列在一起,表达一个十进制整数的公示就变成: 二进制各位从低到高(从右至左)依次乘以2的N次方,其中,N从0开始。 例如: = 12 这就是整数的表达方法。 这里其实蕴含着背后的一个机理,那就是整数是离散的数,1,2,3,4,5。。。。。。,是固定的离散数,计算机都可以通过状态的排列叠加来准确的表达出来。 当然,整数还分为有符号整数(也就是带正负号)和无符号整数两部分。具体的就不展开了。 二、计算机如何存储和表达小数那么问题来了。 如何存储和表达小数呢? 存储小数的话题比较复杂,如果想解开谜题可能要花些笔墨,大家自行查询吧。你会顺便了解浮点数(float)名字的由来。 着重来了解一下,表达小数的问题。 按照计算机硬件存储整数的套路,计算机用二进制表达小数换算为十进制小数的方式也是一样的。 例如:
以小数点为分割,整数部分和小数部分分别计算。 三、为什么计算机表达小数不准确?了解了计算机表达整数和表达小数的方法。你一定注意到了一个细节。那就是,整数作为离散的数据,计算机可以完美的通过多个二进制数的状态叠加来覆盖所有的整数。 然而,小数是连续的,或者数学上也称之为“无限”的。计算机可以通过状态的排列叠加表达超级超级多的状态,但是仍然是有限的。因为硬件是实实在在的就那么多。 比如:0.3这个小数。如果通过二进制存储元件来组合表达,我们怎么来做呢?这里只能采用贪新算法。 首先,我们在最高位赋值1,看看表达的小数是否超过0.3。
已经超过了0.3,遂赋值为0,次高位继续上述操作。
接下来,继续尝试接近0.3,在第三高位赋值为1.
超过0.3,赋值为0,继续尝试,直至
如此往复,尝试下去,将始终无法达到0.3,只能无限接近。但由于元件个数限制(表达容量),甚至无法做到无限接近。 这就是为什么小数无法被准确表达的缘故。 学会了就点个赞吧。:)
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |