现在有如下表达式:
System.out.println(2.00-1.10);
请问输出结果是???..
这里的答案是:0.8999999999999999......减不尽.
现在我们就详细剖析一下浮点型运算为什么会造成精度丢失?
1、小数的二进制表示问题
首先我们要搞清楚下面两个问题:
(1) 十进制整数如何转化为二进制数
算法很简单。举个例子,11表示成二进制数:
11/2=5 余 1
5/2=2 余 1
2/2=1 余 0
1/2=0 余 1
0结束 11二进制表示为(从下往上):1011
这里提一点:只要遇到除以后的结果为0了就结束了,大家想一想,所有的整数除以2是不是一定能够最终得到0。换句话说,所有的整数转变为二进制数的算法会不会无限循环下去呢?绝对不会,整数永远可以用二进制精确表示 ,但小数就不一定了。
(2) 十进制小数如何转化为二进制数
算法是乘以2直到没有了小数为止。举个例子,0.9表示成二进制数
0.9*2=1.8 取整数部分 1
0.8(1.8的小数部分)*2=1.6 取整数部分 1
0.6*2=1.2 取整数部分 1
0.2*2=0.4 取整数部分 0
0.4*2=0.8 取整数部分 0
0.8*2=1.6 取整数部分 1
0.6*2=1.2 取整数部分 0
......... 0.9二进制表示为(从上往下): 1100100100100......
注意:上面的计算过程循环了,也就是说*2永远不可能消灭小数部分,这样算法将无限下去。很显然,小数的二进制表示有时是不可能精确的 。其实道理很简单,十进制系统中能不能准确表示出1/3呢?同样二进制系统也无法准确表示1/10。这也就解释了为什么浮点型减法出现了"减不尽"的精度丢失问题。
分享到:
相关推荐
在本研究中,浮点加减运算的验证过程表明,如果仿真结果和C语言程序下的结果一致,那么可以确认FPGA实现的双精度浮点加减运算硬件描述语言程序是正确的。通过这种方法,可以有效验证FPGA中的双精度浮点运算逻辑。 ...
在IT领域,浮点运算器是计算机硬件中的一个重要组成部分,主要负责执行浮点数的数学运算,如加、减、乘、除以及开方等。浮点运算在科学计算、图形处理、物理学模拟等领域有着广泛的应用。理解浮点运算器的工作原理...
### 基于FPGA技术的浮点运算器的设计与实现 #### 1. 引言 FPGA(Field Programmable Gate Array,现场可编程门阵列)技术因其高度...未来,随着FPGA技术的不断进步,我们可以期待看到更多创新的浮点运算器设计方案。
浮点数的加法和减法主要涉及对齐操作、指数调整和尾数相加减。在加法中,如果两个浮点数的指数相同,可以直接相加尾数;若指数不同,需要将较小尾数左移以对齐,同时更新指数。此外,还需要处理溢出和下溢的情况,...
加法和减法运算的核心思想是通过调整阶码使得尾数可以对齐,然后进行相应的加减操作。在加法中,小阶的浮点数会右移使其与大阶的浮点数对齐,然后两者相加。减法可以通过将减数的符号位翻转后执行加法来实现。在实现...
在进行加减法运算时,最常用的数据类型是`int`(整型)和`float`(浮点型)。对于十进制加减法,我们通常处理的是整数,因此`int`类型就足够了。`int`类型的变量可以存储整数值,如123、456等。 接下来,我们将探讨...
1. **加法/减法**:两个单精度浮点数相加或相减时,首先需要将它们调整到相同的指数,然后对尾数进行加减操作,最后根据结果调整指数并进行规格化处理。 2. **乘法**:两个单精度浮点数相乘时,先将两个数的指数相加...
(4)结果规格化在浮点加减运算时,尾数求和的结果也可以得到 01…或 10…,即两符号位不等,这在定点加减法运算中称为溢出,是不允许的。但在浮点运算中,它表明尾数求和结果的绝对值大于 1,向左破坏了规格化。...
加减交替原码一位除法是一种逐位处理的算法,它通过不断迭代进行除法运算。算法的基本思想是每次只处理被除数的一位,根据当前位以及之前计算的商和余数,决定是加还是减。 步骤如下: 1. 初始化:设定初始的商为0...
在标题“gaojingdu.rar_c 大数加法_c++大数除法_大数 加 减 乘 除_大数算法_高精度”中,我们关注的是用C语言和C++实现的高精度算法,特别是大数的加法、减法、乘法和除法。这些操作是基础数学运算,但在计算机中...
补码加减交替法是基于补码表示的除法算法,通过不断地加减除数来逼近商。 4. 浮点四则运算 浮点运算处理的是带有指数部分的数值,可以表示更大的数范围。浮点加减运算涉及到对齐尾数、处理指数、检查溢出和下溢等...
- **浮点乘加/减操作**:增强了对浮点乘加和减法的支持,使得复杂运算更加高效。 - **整数乘法**:针对整数运算提供了更多的优化,特别是在大数据量处理时表现出色。 #### 三、SSE5的具体内容 根据给定的部分内容...
C6000系列处理器是由德州仪器(TI)推出的高性能浮点数字信号处理器(DSP),常用于嵌入式系统,尤其在通信、音频处理等领域。线性汇编是针对这种处理器的一种低级编程语言,它直接对应于机器指令,提供了对硬件资源...
在IT领域,大数计算是处理超过常规整型或浮点型数据范围的数值运算,通常涉及非常大的数字,如素数检验、加密算法、金融计算等。在本项目中,"大数计算接口"是一个专门设计用于进行大数运算的软件组件,它使用C语言...
标题提到的“大整数运算库”专门针对大整数进行加减乘除及开平方等操作,这些功能在常规的编程语言如C或C++中可能需要额外的库支持来实现。 大整数运算的核心是算法设计,它涉及到一系列高效的数据表示和计算方法。...
这些运算符可以用于整数类型(int, long, short等)和浮点类型(double, float)的数值计算。例如: 1. 加法运算符 (+):将两个数值相加,如 `int sum = 5 + 3;` 结果为8。 2. 减法运算符 (-):从一个数值中减去另一个...
在本项目中,我们探讨的是如何使用C51语言编写一个包含加减乘除以及浮点运算功能的简易计算器。这个计算器不仅能够执行基本的算术操作,还支持浮点数计算,这对于很多实际应用是非常必要的。 首先,我们要理解C51...
根据给定的信息,本次课程设计的主要目标是围绕“小数加减法程序设计”这一主题展开,具体涉及的内容包括但不限于程序的设计与实现、程序的调试与优化等环节,并且整个项目将采用汇编语言作为编程工具。下面我们将从...
除法的过程类似于手算除法,不断地减去除数直到不足以再减为止,然后将商的对应位设置为1。 ##### 2.5 定点运算器的组成 定点运算器通常由算术逻辑单元(ALU)、寄存器和控制电路等部分组成。ALU负责执行基本的...
当处理的数字超出普通整型或浮点型数据类型的范围时,大数运算就显得尤为重要。以下是对“大数运算”这一主题的详细阐述。 首先,我们要理解什么是大数。在计算机中,通常的整型数据类型(如int或long)有其存储...