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

这个问题首先要从数位表示法说起。今天我们看到的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.

转载于:https://www.cnblogs.com/Nobel/archive/2013/04/08/3009162.html

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

  1. flink checkpoint 恢复_干货:Flink+Kafka 0.11端到端精确一次处理语义实现

    2017年12月Apache Flink社区发布了1.4版本.该版本正式引入了一个里程碑式的功能:两阶段提交Sink,即TwoPhaseCommitSinkFunction.该SinkFunction ...

  2. [C++]已知f(x) = cosx - x。x的初值为3.14159/4,用牛顿法求解方程f(x) = 0的近似解,要求精确到10-6。f(x)的牛顿法的表达式为xn+1 = xn + (cosxn

    (附加题)已知f(x) = cosx - x.x的初值为3.14159/4,用牛顿法求解方程f(x) = 0的近似解,要求精确到10-6.f(x)的牛顿法的表达式为xn+1 = xn + (cosxn ...

  3. matlab e 精确到,matlab中用0.618法求minf(x)=e^(-x)+x^2在区间(0,1)上的极小值,精确到0.03....

    共回答了15个问题采纳率:86.7% clc clear all; elp=0.03; tao=0.618; N=fix(log(elp)/log(tao))+1; k=1; a(k)=0; b(k) ...

  4. 乘2取整法_十进制小数转换成二进制小数,可以采用“乘2取整”法

    [判断题]用户Administrator是系统最权威的管理员 [判断题]字长是计算机进行处理时,一次存取.加工和传送的数据长度 [判断题]在Windows"资源管理器"窗口中,按住 ...

  5. python 浮点数精度不准确_python 浮点数不精确原因

    今天遇到有人问我哥问题, a = 7.1sum= a / 1000 print(sum) 输出:0.0070999999999999995 问:不应该是0.0071吗?怎么多了那么多小数位?我虽然知道 ...

  6. 机器学习分类指标:精确率、准确率、召回率详解

    混淆矩阵 在介绍具体的定义之前先了解一些混淆矩阵(confusion matrix): 一种 NxN 表格,用于总结分类模型的预测效果:即标签和模型预测的分类之间的关联.在混淆矩阵中,一个轴表示模型预 ...

  7. 【机器学习入门】(13) 实战:心脏病预测,补充: ROC曲线、精确率--召回率曲线,附python完整代码和数据集

    各位同学好,经过前几章python机器学习的探索,想必大家对各种预测方法也有了一定的认识.今天我们来进行一次实战,心脏病病例预测,本文对一些基础方法就不进行详细解释,有疑问的同学可以看我前几篇机器学习 ...

  8. 如何解决JavaScript中0.1+0.2不等于0.3

    原文转载自:https://www.cnblogs.com/weshare/archive/2018/02/20/8455470.html >console.log(0.1+0.2===0.3) ...

  9. 2 未匹配到任何借口_拼多多【关键词精确匹配溢价】给你想要的精准流量,让你订单暴增的秘诀...

    关键词匹配方式升级啦,开启精确匹配溢价功能,拥有更多精准流量.为帮助商家解决在使用多多搜索时,遇到的关键词流量不精准.流量不可控.点击率低的问题,多多搜索新推出[关键词精确匹配溢价]功能.通过精确匹配 ...

最新文章

  1. MindSpore模型推理
  2. ODS DWD DWS ADS 数仓分层
  3. 图像凸性检测函数convexityDefects在Python2.7下使用opencv3.0的问题
  4. 漫步者蓝牙驱动_有什么平价好用的蓝牙耳机?双11不踩雷高性价比蓝牙耳机推荐...
  5. 什么是python语言的动态类型机制_理解Python的Dynamic typing
  6. 只读副本和Spring Data第2部分:配置基础项目
  7. java 解决时间相减问题
  8. 我的《野蛮生长》书摘
  9. 魅族回应 “暗中给手机植入木马”;前谷歌AI伦理专家遭解雇或因论文;GoLand 2020.3发布|极客头条...
  10. 初探信息科学中“三个世界”模型
  11. java基础之String类型
  12. 视频管理系统源码php,video cms 视频分享管理系统
  13. JS实现关闭网页广告弹窗特效
  14. 开发谷歌浏览器插件会上瘾,搞了一个JSONViewer,一个页面格式化多条JSON,提升工作效率...
  15. JAVA计算机毕业设计晨光文具店进销存系统设计与开发计算机(附源码、数据库)
  16. 外部电源和锂电池自动切换电路
  17. 快速搭建自己的风格迁移
  18. 微信小程序php开发实例,微信小程序教程之demo:猫眼电影实例
  19. 计算机程序的各个段【数据段、代码段等】
  20. 国产Hygon处理器MCA架构总结

热门文章

  1. [Kaggle] Sentiment Analysis on Movie Reviews(BERT)
  2. LeetCode 1674. 使数组互补的最少操作次数(差分思想)
  3. LeetCode 151. 翻转字符串里的单词(栈)
  4. antd的 input有下拉_解决antd 下拉框 input [defaultValue] 的值的问题
  5. LeetCode228场周赛解题报告
  6. ADS1.2开发环境创建与简要介绍
  7. c#服务器后台搭建_【环境搭建】Docker简明安装教程
  8. potainer 日志_日志系统落地:制定日志规范
  9. 改变世界,改善生活:我从科沃斯扫地机器人X1,看到了AI新的希望
  10. MyFlash——美团点评的开源MySQL闪回工具