| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> 计算机基础_程序是怎样跑起来的_03_计算机进行小数运算时出错的原因 -> 正文阅读 |
|
[Java知识库]计算机基础_程序是怎样跑起来的_03_计算机进行小数运算时出错的原因 |
文章目录计算机进行小数运算时出错的原因0、热身问题
我们之前已经发表过一篇关于浮点数的博客——《计算机基础——浮点数的小细节》,当时是纯手写笔记,我觉得讲的很全但是不够直观。所以希望这篇文章,能尽量搞懂关于“小数”的知识。 这两篇博客配合起来看,也能更好地理解。 1、将0.1累加100次首先,我们先来个小Java的程序例子,我们把0.1累加100次,看看结果是不是“0.1 x 100 = 10”。
后面我们就来解释一下,为什么“将0.1累加100次也得不到10”。 2、用二进制数表示小数之前我们说了,计算机内的所有信息都是以二进制的形式处理的,那小数当然也不例外。 我们以1011.0011转换成十进制为例子。 3、计算机运算出错的原因计算机运算小数出错的原因:有一个十进制的小数无法转换成二进制数。 我们以“小数点后4位二进制数”来举例子。 从下图我们就可以发现,有一些十进制的小数是不能表示出来的。比如说十进制的0.1,其二进制表示为0.000 1100 1100……(1100循环)。 而计算机这个功能有限的设备,是无法处理无限循环的小数的。所以在计算的时候,计算机就会根据变量所对应的长度讲数值进行截断或者四舍五入。 也就出现了“0.1累加100次不是10”这个“错误”了。 4、什么是浮点数像1011.0011这种带点小数的表达形式,我们人类自己的一种“书面表达方式”,计算机它可看不懂。 计算机内部使用“浮点数”来表示小数。
浮点数的内部构造(IEEE标准) 双精度浮点数类型用64位,单精度浮点数类型用32位。 5、正则表达式和EXCESS系统5.1、正则表达式尾数部分使用“正则表达式”,将小数点前面的值固定为1的正则的表达式。 将二进制表示的小数左移或者右移(逻辑右移),整数部分的第1位变为1,第2位之后变为0。 整数使用包含最高位(即符号位)在内的 全体二进制来表示数值。 浮点数由符号部分、尾数部分和指数部分这三部分独立的数值组合而成。 5.2、EXCESS系统
指数部分使用EXCESS系统,主要是为了表示负数时不使用符号位。 以单精度浮点数为例,其指数部分占8位。 6、在实际的程序中进行确定我们看一个C语言的小程序,源码如下:
我们通过VS2022的内存监控来看0.75这个数在底层是在怎么存储的。 再通过一个Java的程序来验证0.75的二进制为0.11。
7、如何避免计算机计算出错两种方法:
8、二进制和十六进制十六进制,以“0x”或“0X”表示。 八进制,以“0O”或者“0o”表示(0和字母Oo)。 二进制,以“0B”或“0b”表示。
注:如有错误,敬请指正。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 20:29:20- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |