`
CrazzyLee
  • 浏览: 26792 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

浮点减法减不断

    博客分类:
  • Java
阅读更多
现在有如下表达式:
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。这也就解释了为什么浮点型减法出现了"减不尽"的精度丢失问题。
分享到:
评论
1 楼 heavenslv 2011-02-25  
额 以前没注意 不过有一回碰到了 这个得了解!

相关推荐

    基于FPGA双精度浮点加减运算的验证.pdf

    在本研究中,浮点加减运算的验证过程表明,如果仿真结果和C语言程序下的结果一致,那么可以确认FPGA实现的双精度浮点加减运算硬件描述语言程序是正确的。通过这种方法,可以有效验证FPGA中的双精度浮点运算逻辑。 ...

    jisuanji.rar_浮点开方_浮点运算器

    在IT领域,浮点运算器是计算机硬件中的一个重要组成部分,主要负责执行浮点数的数学运算,如加、减、乘、除以及开方等。浮点运算在科学计算、图形处理、物理学模拟等领域有着广泛的应用。理解浮点运算器的工作原理...

    基于FPGA技术的浮点运算器的设计与实现

    ### 基于FPGA技术的浮点运算器的设计与实现 #### 1. 引言 FPGA(Field Programmable Gate Array,现场可编程门阵列)技术因其高度...未来,随着FPGA技术的不断进步,我们可以期待看到更多创新的浮点运算器设计方案。

    fpga实现浮点数加减乘除四则运算

    浮点数的加法和减法主要涉及对齐操作、指数调整和尾数相加减。在加法中,如果两个浮点数的指数相同,可以直接相加尾数;若指数不同,需要将较小尾数左移以对齐,同时更新指数。此外,还需要处理溢出和下溢的情况,...

    浮点运算1

    加法和减法运算的核心思想是通过调整阶码使得尾数可以对齐,然后进行相应的加减操作。在加法中,小阶的浮点数会右移使其与大阶的浮点数对齐,然后两者相加。减法可以通过将减数的符号位翻转后执行加法来实现。在实现...

    C++十进制加减法

    在进行加减法运算时,最常用的数据类型是`int`(整型)和`float`(浮点型)。对于十进制加减法,我们通常处理的是整数,因此`int`类型就足够了。`int`类型的变量可以存储整数值,如123、456等。 接下来,我们将探讨...

    深入理解单精度浮点运算

    1. **加法/减法**:两个单精度浮点数相加或相减时,首先需要将它们调整到相同的指数,然后对尾数进行加减操作,最后根据结果调整指数并进行规格化处理。 2. **乘法**:两个单精度浮点数相乘时,先将两个数的指数相加...

    计算机组成原理小抄西安皇家邮电大学御用版.doc

    (4)结果规格化在浮点加减运算时,尾数求和的结果也可以得到 01…或 10…,即两符号位不等,这在定点加减法运算中称为溢出,是不允许的。但在浮点运算中,它表明尾数求和结果的绝对值大于 1,向左破坏了规格化。...

    加减交替原码一位除

    加减交替原码一位除法是一种逐位处理的算法,它通过不断迭代进行除法运算。算法的基本思想是每次只处理被除数的一位,根据当前位以及之前计算的商和余数,决定是加还是减。 步骤如下: 1. 初始化:设定初始的商为0...

    gaojingdu.rar_c 大数加法_c++大数除法_大数 加 减 乘 除_大数算法_高精度

    在标题“gaojingdu.rar_c 大数加法_c++大数除法_大数 加 减 乘 除_大数算法_高精度”中,我们关注的是用C语言和C++实现的高精度算法,特别是大数的加法、减法、乘法和除法。这些操作是基础数学运算,但在计算机中...

    2009年计算机考研计算机组成原理运算算法归纳总结(特别适合临考前复习)

    补码加减交替法是基于补码表示的除法算法,通过不断地加减除数来逼近商。 4. 浮点四则运算 浮点运算处理的是带有指数部分的数值,可以表示更大的数范围。浮点加减运算涉及到对齐尾数、处理指数、检查溢出和下溢等...

    AMD sse5指令集

    - **浮点乘加/减操作**:增强了对浮点乘加和减法的支持,使得复杂运算更加高效。 - **整数乘法**:针对整数运算提供了更多的优化,特别是在大数据量处理时表现出色。 #### 三、SSE5的具体内容 根据给定的部分内容...

    c6000线性汇编小程序(加减乘除)

    C6000系列处理器是由德州仪器(TI)推出的高性能浮点数字信号处理器(DSP),常用于嵌入式系统,尤其在通信、音频处理等领域。线性汇编是针对这种处理器的一种低级编程语言,它直接对应于机器指令,提供了对硬件资源...

    大数计算接口,实现了大数的加减乘除

    在IT领域,大数计算是处理超过常规整型或浮点型数据范围的数值运算,通常涉及非常大的数字,如素数检验、加密算法、金融计算等。在本项目中,"大数计算接口"是一个专门设计用于进行大数运算的软件组件,它使用C语言...

    大整数运算库 大整数四则运算,加减乘除开平方

    标题提到的“大整数运算库”专门针对大整数进行加减乘除及开平方等操作,这些功能在常规的编程语言如C或C++中可能需要额外的库支持来实现。 大整数运算的核心是算法设计,它涉及到一系列高效的数据表示和计算方法。...

    简单的加减乘除法,C#源代码程序,适合初学者.

    这些运算符可以用于整数类型(int, long, short等)和浮点类型(double, float)的数值计算。例如: 1. 加法运算符 (+):将两个数值相加,如 `int sum = 5 + 3;` 结果为8。 2. 减法运算符 (-):从一个数值中减去另一个...

    基于单片机C51的计算器源代码(附图)

    在本项目中,我们探讨的是如何使用C51语言编写一个包含加减乘除以及浮点运算功能的简易计算器。这个计算器不仅能够执行基本的算术操作,还支持浮点数计算,这对于很多实际应用是非常必要的。 首先,我们要理解C51...

    计算机组成原理课程设计

    根据给定的信息,本次课程设计的主要目标是围绕“小数加减法程序设计”这一主题展开,具体涉及的内容包括但不限于程序的设计与实现、程序的调试与优化等环节,并且整个项目将采用汇编语言作为编程工具。下面我们将从...

    浮点数的计算方法

    除法的过程类似于手算除法,不断地减去除数直到不足以再减为止,然后将商的对应位设置为1。 ##### 2.5 定点运算器的组成 定点运算器通常由算术逻辑单元(ALU)、寄存器和控制电路等部分组成。ALU负责执行基本的...

    大数运算方法

    当处理的数字超出普通整型或浮点型数据类型的范围时,大数运算就显得尤为重要。以下是对“大数运算”这一主题的详细阐述。 首先,我们要理解什么是大数。在计算机中,通常的整型数据类型(如int或long)有其存储...

Global site tag (gtag.js) - Google Analytics