精华内容
下载资源
问答
  • 浮点数的运算

    2020-10-27 16:59:31
    数据的表示(浮点数的运算) 浮点数的表示形式:N=M*R^e(其中M称为尾数,R称为基数,e称为指数) 浮点数的表示其实跟数学中学的科学计数法类似 浮点数的一般计算过程:对阶——尾数计算——结果格式化 对阶:两个数...

    数据的表示(浮点数的运算)

    1. 浮点数的表示形式:N=M*R^e(其中M称为尾数,R称为基数,e称为指数)
      浮点数的表示其实跟数学中学的科学计数法类似
    2. 浮点数的一般计算过程:对阶——尾数计算——结果格式化
    3. 对阶:两个数如果指数e不同,那么就要将指数化为同等级
    4. 尾数计算
    5. 结果格式化:所谓结果格式化,就是结果的小数点前只能有一位数,确保小数点左边的位置不能是0或者一位以上的数字。
    展开全文
  • 浮点数的运算步骤

    2021-02-19 23:32:12
    浮点数的运算步骤 浮点数的加减运算一般由以下五个步骤完成:对阶、尾数运算、规格化、舍入处理、溢出判断 一、对阶 所谓对阶是指将两个进行运算的浮点数的阶码对齐的操作。对阶的目的是为使两个浮点数的尾数能够...

    浮点数的运算步骤

    浮点数的加减运算一般由以下五个步骤完成:对阶尾数运算规格化舍入处理溢出判断

    一、对阶

    所谓对阶是指将两个进行运算的浮点数的阶码对齐的操作。对阶的目的是为使两个浮点数的尾数能够进行加减运算。因为,当进行M x·2Ex与M y·2Ey加减运算时,只有使两浮点数的指数值部分相同,才能将相同的指数值作为公因数提出来,然后进行尾数的加减运算。对阶的具体方法是:首先求出两浮点数阶码的差,即⊿E=E x-E y,将小阶码加上⊿E,使之与大阶码相等,同时将小阶码对应的浮点数的尾数右移相应位数,以保证该浮点数的值不变。几点注意:

    (1)对阶的原则是小阶对大阶,之所以这样做是因为若大阶对小阶,则尾数的数值部分的高位需移出,而小阶对大阶移出的是尾数的数值部分的低位,这样损失的精度更小。

    (2)若⊿E=0,说明两浮点数的阶码已经相同,无需再做对阶操作了。

    (3)采用补码表示的尾数右移时,符号位保持不变。

    (4)由于尾数右移时是将最低位移出,会损失一定的精度,为减少误差,可先保留若干移出的位,供以后舍入处理用。

    二、尾数运算

    尾数运算就是进行完成对阶后的尾数相加减。这里采用的就是我们前面讲过的纯小数的定点数加减运算。

    三、结果规格化

    在机器中,为保证浮点数表示的唯一性,浮点数在机器中都是以规格化形式存储的。对于IEEE754标准的浮点数来说,就是尾数必须是1.M的形式。由于在进行上述两个定点小数的尾数相加减运算后,尾数有可能是非规格化形式,为此必须进行规格化操作。

    规格化操作包括左规和右规两种情况。

    左规操作:将尾数左移,同时阶码减值,直至尾数成为1.M的形式。例如,浮点数0.0011·25是非规格化的形式,需进行左规操作,将其尾数左移3位,同时阶码减3,就变成1.1100·22规格化形式了。

    右规操作:将尾数右移1位,同时阶码增1,便成为规格化的形式了。要注意的是,右规操作只需将尾数右移一位即可,这种情况出现在尾数的最高位(小数点前一位)运算时出现了进位,使尾数成为10.xxxx或11.xxxx的形式。例如,10.0011·25右规一位后便成为1.00011·26的规格化形式了。

    四、 舍入处理

    浮点运算在对阶或右规时,尾数需要右移,被右移出去的位会被丢掉,从而造成运算结果精度的损失。为了减少这种精度损失,可以将一定位数的移出位先保留起来,称为保护位,在规格化后用于舍入处理。

    IEEE754标准列出了四种可选的舍入处理方法:

    (1)就近舍入(round to nearest)这是标准列出的默认舍入方式,其含义相当于我们日常所说的“四舍五入”。例如,对于32位单精度浮点数来说,若超出可保存的23位的多余位大于等于100…01,则多余位的值超过了最低可表示位值的一半,这种情况下,舍入的方法是在尾数的最低有效位上加1;若多余位小于等于011…11,则直接舍去;若多余位为100…00,此时再判断尾数的最低有效位的值,若为0则直接舍去,若为1则再加1。

    (2)朝+∞舍入(round toward +∞)对正数来说,只要多余位不为全0,则向尾数最低有效位进1;对负数来说,则是简单地舍去。

    (3)朝-∞舍入(round toward -∞)与朝+∞舍入方法正好相反,对正数来说,只是简单地舍去;对负数来说,只要多余位不为全0,则向尾数最低有效位进1。

    (4)朝0舍入(round toward 0)

    即简单地截断舍去,而不管多余位是什么值。这种方法实现简单,但容易形成累积误差,且舍入处理后的值总是向下偏差。

    五、 溢出判断

    与定点数运算不同的是,浮点数的溢出是以其运算结果的阶码的值是否产生溢出来判断的。若阶码的值超过了阶码所能表示的最大正数,则为上溢,进一步,若此时浮点数为正数,则为正上溢,记为+∞,若浮点数为负数,则为负上溢,记为-∞;若阶码的值超过了阶码所能表示的最小负数,则为下溢,进一步,若此时浮点数为正数,则为正下溢,若浮点数为负数,则为负下溢。正下溢和负下溢都作为0处理。

    要注意的是,浮点数的表示范围和补码表示的定点数的表示范围是有所不同的,定点数的表示范围是连续的,而浮点数的表示范围可能是不连续的。

    六、例子

    float a=0.3;b=1.6;

    a=(0.3)10=(0011 1110 1001 1001 1001 1001 1001 1010)2    Sa=0    Ea=011 1110 1    Ma=1.001 1001 1001 1001 1001 1010

    b=(1.6)10=(0011 1111 1100 1100 1100 1100 1100 1101)2      Sb=0    Eb=011 1111 1     Mb=1.100 1100 1100 1100 1100 1101

    a+b=?

    第一步:对阶

    ∵ Ea<Eb   Eb-Ea=2

    ∴ Ma要调整为 0.0 1001 1001 1001 1001 1001 10       10

       E=011 1111 1

    第二步:尾数运算

        0.01001100110011001100110

    +  1.10011001100110011001101

        1.11100110011001100110011‬

    第三步:规格化

    1.11100110011001100110011‬已经是个规格化数据了

    第四步:舍入处理

    由于在对阶时,Ma有右移,且第一次最高为1,第二次为0,所以按"0舍1入",尾数运算结果调整为 1.11100110011001100110100

    第五步:溢出判断

    没有溢出,阶码不调整,所以最后的结果为

    a+b=(0  01111111  11100110011001100110100)2=(0011 1111 1111 0011 0011 0011 0011 0100)2=(3FF33334)16

    转为10进制

    a+b=1.90000010

    b-a=?

    第一步:对阶

    跟上面加法一样

    第二步:尾数运算

       1.10011001100110011001101           

    -  0.01001100110011001100110

       1.01001100110011001100111

    第三步:规格化

    1.01001100110011001100111已经是个规格化数据了

    第四步:舍入处理

    由于在对阶时,Ma有右移,且第一次最高为1,第二次为0,所以按"0舍1入",尾数运算结果调整为 1.01001100110011001100110

    第五步:溢出判断

    没有溢出,阶码不调整,所以最后的结果为

    a-b=(0  01111111  01001100110011001100110)2=(0011  1111  1010  0110  0110  0110  0110  0110)2=(3FA66666)16

    转为10进制

    a-b=1.29999995

     

    付:浮点运算加法器逻辑电路

     

     

    原文地址:https://www.cnblogs.com/yilang/p/11277201.html

     

     

     

    展开全文
  • 浮点数的运算方法

    2013-01-28 16:31:01
    江苏计算机三级偏软中关于浮点数的运算方法
  • 主要介绍了Shell脚本处理浮点数的运算和比较实例,文中分别使用了bc或awk实现,需要的朋友可以参考下
  • float和double浮点数的运算过程

    千次阅读 2018-09-08 16:30:58
    float和double浮点数的运算过程 目录 用 [TOC]来生成目录: float和double浮点数的运算过程 目录 1. 浮点数在计算机底层的存储方式 2. 十进制数与二进制浮点数之间的转换 3. 加减运算 4. 总结 ...

    float和double浮点数的运算过程

    本人邮箱:zhouyouchn@126.com zhoooooouyou@gmail.com
    zhouyou@whut.edu.cn 欢迎交流讨论。
    欢迎转载,转载请注明网址:https://blog.csdn.net/qq_41910280

    目录


    简介:本文以float为例,演示了浮点数在计算机底层的存储方式、浮点数10进制与2进制间的相互转换以及浮点数加减运算全过程。

    1. 浮点数在计算机底层的存储方式

    不论是float还是double在存储方式上都是遵从IEEE 754的规范。根据国际标准IEEE 754,任意一个二进制浮点数V可以表示成下面的形式:
    IEEE 754浮点数计算公式
      (1)S(Sign)表示符号位,当S=0,V为正数;当S=1,V为负数。

    (2)M(Mantissa)表示尾数(2进制),大于等于1,小于2。

    (3)E(Exponent)表示指数位(阶码)。
      (不理解的先看下科学计数法
      
      其中单精度浮点数float遵从IEEE R32.24,存储方式如下图所示:
      float存储方式
      双精度浮点数double遵从R64.53,存储方式如下图所示:
      double存储方式
      
      
      IEEE 754规定,在计算机内部保存M时,因为M范围是[1,2),默认这个数的第一位总是1,因此可以被舍去,只保存后面的小数部分。所以float类型23位的M可以表示24位二进制数,double类型52位的M可以表示53位二进制数。
      IEEE754规定E为一个无符号整数(unsigned int)。这意味着,float类型E的取值范围为0至255;double类型E的取值范围为0~2047。但是,我们知道,科学计数法中的E是可以出现负数的。所以IEEE 754规定,计算机中存储的E为实际值加上中位数,这个中位数对于float类型8位E是127,对于double类型11位的E这个值是1023。即,在float中,E用125表示-2,用127表示0,用128表示1。(区别于移码)

    2. 十进制数与二进制浮点数之间的转换

    以1.0F、0.42F为例。
      1.0F(10进制)=1.0(2进制)×2^0。S=0(正数);E=0,在计算机中加上127为127;M=1.0,在计算机中为23位0。所以转换为内存或硬盘中的二进制数为
      0(S)011 1111 1(E)000 0000 0000 0000 0000 0000(M)。
      
      0.42F要稍微复杂一点,小数转换为二进制要不断乘以2,乘积大于1时,余1,小于1时,余0,余数排列方向与整数转二进制相反,过程就不演算了。也可以直接使用工具 ——》 链接:IEEE 754 单精度浮点数转换
      0.42F(10进制)=1.10101110000101000111101(2进制)×2^(-2),float类型M只保留24位有效数字,多余被计算机省略。S=0(正数);E=-2,在计算机中加上127为125;M=1.10101110000101000111101,在计算机中省去1,为10101110000101000111101。所以转换为内存或硬盘中的二进制数为
      0(S)011 1110 1(E)101 0111 0000 1010 0011 1101(M)。等于十进制的0.4199999868869781494140625,产生了精度损失。(这里留一个问题给大神们:直接打印0.42F结果为0.42,似乎没有精度损失?!——>见本文评论

    3. 加减运算

    加减运算,以1.0F-0.42F为例。
      计算过程
      1.0F和0.42F都是遵循IEEE 754规范,以二进制形式储存在计算机中,分别为0(S)011 1111 1(E)000 0000 0000 0000 0000 0000(M)、0(S)011 1110 1(E)101 0111 0000 1010 0011 1101(M)。
      在加减运算时,第一步:指数低的数向指数高的数转换,这里0.42F的E=011 1110 1,1.0F的E=011 1111 1,所以0.42F发生转换,结果为0(S)011 1111 1(E)011 0101 1100 0010 1000 1111(M)。这里的M只有23位(有效位数22),或者说最高的第24位为0。而且移位过程中省略了移位多出来的位数01,发生第二次精度损失。
      
      第二步:结果的M值进行加减运算,即1000 0000 0000 0000 0000 0000(M)-0011 0101 1100 0010 1000 1111(M),结果为100 1010 0011 1101 0111 0001(M)。这里的M同样也只有23位(有效位数23),或者说最高的第24位为0。结果见图。
      
      第三步:将第二步的结果转换为IEEE 754标准(详见), 结果为0(S) 011 1111 0(E) 001 0100 0111 1010 1110 0010(M),转换为10进制为0.58000004291534423828125,控制台打印结果为

    0.58000004

    这是第三次精度损失。
      
      额外补充:第二步还有一种可能,就是计算过程保留移位的小数,这样计算精度更高,不过计算效率会降低。
      如果采用这种方式计算,0.42F在计算时会移位为(S)011 1111 1(E)011 0101 1100 0010 1000 1111 11(M多保留了2位,M=11 0101 1100 0010 1000 1111 11,有效位数24位),运算结果为0(S)011 1111 0(E)001 0100 0111 1010 1110 0001(M),换为10进制为0.579999983310699462890625。
      经过上面的分析,第一种计算方式的第二次精度损失发生在移位过程中省略的两位有效数字;而与第一种计算方式不同,第二种计算方式,第二次精度损失发生在加减后转换为IEEE 754标准的时候。
      跟控制台输出的结果对比,我初步判断,计算机采用的是第一种计算方式进行的运算。

    4. 总结


      A、演示了浮点数在计算机内部的存储与运算;
      
      B、在同类型两个浮点数进行加减运算并打印的过程中,可能会产生0 - 4次精度损失。分别为两个十进制数转换为二进制存储的过程、低位数向高位数移位的过程、结果转换为十进制数打印的时候。
      
      C、浮点数运算,指数低的数向指数高的数移位时没有保留多出来的位数。
      

    展开全文
  • 11、浮点数的运算科学技术法的运算浮点数的运算舍入问题浮点数的强制类型转化 科学技术法的运算 浮点数的运算 舍入问题 浮点数的强制类型转化 int—>float: int : 1 + 31,尾数表示位数31位 float : 1 + 8 +...

    思维导图

    在这里插入图片描述

    科学技术法的运算

    在这里插入图片描述

    浮点数的运算

    在这里插入图片描述

    舍入问题

    在这里插入图片描述

    浮点数的强制类型转化

    在这里插入图片描述

    int—>float:
    int : 1 + 31,尾数表示位数31位
    float : 1 + 8 + 23,实际尾数表示位数:23 + 1 = 24位
    所以int—>float会产生精度损失

    float—>int:float表示范围更大
    float : 0.0011,转int后:0,精度损失
    float:阶码:01111111=127,尾数:11111…,真值:2127×(2−2−23),转int后溢出

    下溢:直接置0
    上溢:系统抛出异常

    展开全文
  • 阶码运算和尾数运算分开进行。浮点数的加减运算一律采用补码。 真值到机器数的转换 对阶 尾数加减 规格化 舍入 溢出判断
  • 一:shell中对整数和浮点数的运算 常用的运算符号 加法+ 减法 - 乘法* 除法/ 求余% += -= *= /= %= 1.整数的运算 (1).使用expr命令(注意:要求操作数和操作数之间用空格隔开,否则只会打...
  • MATLAB 浮点数的运算

    2018-08-20 16:26:12
    简单几行代码,本代码主要利用MATLAB工具实现浮现数的运算,简单明了,易于理解。
  • JAVA中浮点数的运算

    2019-05-27 02:44:19
    NULL 博文链接:https://spiritfrog.iteye.com/blog/602147
  • 7744问题_记:浮点数的运算可能存在误差,不是一定存在,但经常都会 方法一:使用函数sqrt()开平方、floor()返回整数部分判断 //7744,利用+0.5进行四舍五入以避免浮点数运算可能存在的误差 int n; double m; ...
  • 计组浮点数的运算

    2020-05-12 09:06:55
    id=1214577851&sm=1 MOOC《计算机组成原理》河南科技大学 这两个数本身是规格化数,Mx和My是尾数,Ex和Ey是阶码。...对阶操作:即比较两个浮点数的阶码值的大小,求ΔE=Ex-Ey,然后将小阶对大阶; 对
  • 关于16进制字符串转为单精度浮点数和双精度浮点数的运算(一)最近在进行GPIB方面的开发时,传回的数据有这两种格式,1.IEEE 32位浮点数格式;2.IEEE 64位浮点数格式。1.IEEE 32位浮点数格式 这种格式的特点是:每个...
  • 其实这设计到了计算机的浮点数存储是以二进制进行存储。 说二进制不太形象,换成我们最长使用十进制和分数 1/5,使用小数表示为0.2,但是1/3,使用小数表示就是一个无限循环小数:0.3333333, 也就是说,分数 ...
  • C语言中浮点数的运算

    千次阅读 2016-07-24 00:27:58
    C语言中,在进行相应乘除运算时: 只要其中一个为浮点数,那么最后得到结果一定是一个带小数点的浮点数! 如:3.0*6=18.0 48/3.0=16.0
  • 2.3.3 浮点数的运算(21)

    2020-07-18 18:15:03
    浮点数的加减运算 对阶:小阶向大阶看齐 尾数加减: 规格化:如果发生尾数溢出进行规格化 舍入:四舍五入等方法保留一定位数 判断溢出:只有阶码发生溢出才是真的溢出,尾数发生溢出不一定发生溢出 浮点数的加减...
  • java中浮点数的运算

    2013-08-14 16:44:18
    看下列程序: public class Fudian { public static void main(Strings[] args) { System.ou.println(2.0 - 1.1); } } 输出结果会是什么呢? 0.8999999999999999 ...所以,在java中要对浮点数进行运算,可
  • 定点数和浮点数的运算

    千次阅读 2018-10-16 15:22:35
    文章目录1、补码加减法2、算法流程3、逻辑实现4、溢出判断5、移位操作6、舍入方法7、定点乘法运算8、定点除法运算9、浮点数相关计算 1、补码加减法 原码、反码、补码转换: 1、先把数值转换成对应二进制数;...
  • 关于浮点数的运算

    2016-10-25 19:32:53
    为什么浮点数在较大算术运算中,会损失更多精度?
  • 1. 浮点数的表示 m 是尾数, 为±d.dddddd 其中 第一位必须非0 b 是基数, 下面,让我们回到一开始的问题:为什么0x00000009还原成浮点数,就成了0.000000? 首先,将0x00000009拆分,得到第一位符号...
  • 文章目录数值范围表定点整数定点小数浮点数浮点数的表示运算过程浮点数的特点浮点数的范围 数值范围表 上面这张表是不用硬记的,下面方法告诉你这么记 定点整数 小数点是固定的,固定小数点在数的最右边,小数点不...
  • package hello; import java.util.Scanner; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub int foot; foot = (int)(30/ 3.0);... System.out.p...
  • using System; namespace CSharplearn { class Program { static void Main(string[]...=是我手打上去但是用其他检测方法一样会得出false结果)所以在小数运算时要不改用decimal要不就判断两数之差是否相似于某个值.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,753
精华内容 3,501
关键字:

浮点数的运算