为什么0.1无法被二进制小数精确表示?

这个问题困扰了我不少时间,最近有个比较清晰的认识,和大家分享。

这个问题首先要从数位表示法说起。今天我们看到的123这样的十进制数,是自然而然的理解其意义,但是有没有深究其内在的数学原理呢?

所谓十进制是0~9十个基本符号为基础的一种数字表示法,数位表示法是将一串基本符号从左到右连续排列的一种方法。为什么12时表示一十二,而不是二十一,或者是一加二的意思呢?因为数字所处的位置是有特别意义的,最右边第一个数字符号,代表基本的数0~9,而第二位的意义并不是0~9,而是0*10~9*10。推而广之,百位是x*100,(x是符号),用简练的数学公式就是x*10^k , 个位k是0,十位是1,百位k是2,从右到左一直数下去。123的意思就是1*10^2+2*10^1+3*10^0。

位置,进制,符号这三者的关系就是“123”这种数字表示法内在的数学原理。

那么,0.1 是什么意思?是1*10^-1,向右数数的结果。小数点是为了区分个位的位置在哪里。

一个数要用“数位表示法”表示出来,必然需要能够化为x*10^k的形式,而并不是任意数都能够做到。从数位法小数的定义看可以得知,一个数要能够被表示出来,需要能除尽10,才有若干个x*10^k 的数位组合表示它,否则就是无数个符号才能表示。如1/3这个数除以10等于1/3*1/10 = 0.0333333….循环小数。

究竟哪些数可以用十进制表示哪些不可以?如分母是10的因子和因子的合数,如1,2,5,10,20,50等(整数分母为1,而任意大于1的数的因子都有1和自身,因此整数可以用任意数制精确表示)。

回答题目,为什么0.1无法被二进制小数表示,0.1即1/10这个数要转换成二进制即x*2^k的组合数,必须要除尽2.要注意,2进制只有0,1两个符号,另一个需要注意,二进制被除数右移一位等于*2,而非10进制的*10。

1/10*1/2 = 1/20

1*2*2*2*2 = 32 右移4位

-20 = 12        商1

12*2 = 24 右移1位

-20 = 4       商1

4*2*2*2 =32 右移3位

-20 = 12   商1  可见数字重复了,循环小数无疑

即 0.00011001。

那么2进制能够表示哪些十进制小数,5/10,因为能约成1/2,分母是2的因子。

总结一点,就是位置表示法有其自身的缺陷,并不能在有限的数位,表示众多有理数,这个时候,需要借助分数来帮忙,来避免位置表示法以固定数作分母这个缺点。

如果需要一个可以避免循环小数的数制,不妨试用210进制,因为因子比较多,2*3*5*7 =210.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 0.1二进制下是一个无限循环小数。具体来说,它可以表示为: 0.0001100110011001100110011001100110011001100110011…… 其中,数字1100是一个循环节,不停地重复出现。这是因为在二进制下,我们只能用分数的形式来表示某些小数,而有些小数在分数形式下是无限循环小数0.1就是这样一个例子。 ### 回答2: 0.1二进制表示为0.0001100011……。 在十进制中,我们分别用0.1和0.01表示1/10和1/100。然而,当我们用二进制表示小数时,不是所有的小数都可以准确地用有限位数表示。这是因为在二进制中,只有1/2, 1/4, 1/8等分数可以被准确表示。 当我们将0.1转换为二进制时,无论我们使用多少位数,都无法准确表示它。这是因为0.1二进制中是一个无限循环的二进制表示。例如,0.1二进制表示是0.0001100011……。 这是因为0.1无法被2整除,所以我们用1/2来表示它的最高位。然后,余下的部分1/2是0.5,无法整除,所以我们用1/4来表示。接着,余下的部分是0.25,同样无法整除,所以我们用1/8来表示。以此类推,直到无限循环。 因此,0.1无法精确地用有限位数的二进制表示。在计算机中,它通常被近似为最接近的二进制值。这就是为什么在计算机中进行浮点数运算时,可能会发生舍入误差,并且需要额外的处理来避免错误积累的原因之一。 ### 回答3: 0.1二进制表示为0.0001100011.....这是因为在二进制数系统中,小数部分采用的是二分法来进行表示。 首先,我们将0.1转换为二进制数。我们可以用以下算法将十进制小数转换为二进制小数: 1. 将小数乘以2,得到整数部分和小数部分。 2. 将整数部分保留,将小数部分再次乘以2,得到新的整数部分和小数部分。 3. 重复上述步骤,直到小数部分为0或者达到所需的精度。 对于0.1来说,我们将其乘以2,得到0.2。整数部分为0,小数部分为0.2。再次乘以2,得到0.4。整数部分为0,小数部分为0.4。继续这个过程,得到一系列的小数部分为0.8、0.6、0.2、0.4、0.8、0.6、0.2......一直循环下去。 这是因为0.1二进制中无限循环,不能准确地用有限位数表示。只能通过不断乘2,得到无限循环的小数部分。 所以,0.1二进制中就被表示为0.0001100011.....。需要注意的是,这个表示方式是一个无限循环,实际上在计算机中只能取有限位数的近似值,可能会有一定的误差。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值