zoukankan      html  css  js  c++  java
  • 浮点数的表示和运算

    浮点数的表示

    计算机没办法表示小数点。

    定点数:如纯小数0.1011和纯整数11110

    科学计数法

    十进制:299792458m/s=2.998*10^8m/s

    浮点数

    以适当的形式将比例因子表示在数据中,让小数点的位置根据需要而浮动

    相当于使用两个定点数拼接而成的

    浮点数基本格式

    阶码E反映浮点数的表示范围及小数点的实际位置;尾数M的数值部分的位数n反映浮点数的精度

    例子:

    注意,正数的补码还是自己

    漏了1位

    如此操作

    浮点数的规格化

    规格化:规定尾数的最高数位必须试一个有效值

    左规:当浮点数运算的结果为非规格化时要进行规格化处理,将尾数左移一位,阶码减1(基数为2时)

    右规:当浮点数运算的结果尾数出现溢出(双符号位为01或10)时,将尾数右移一位,阶码加1(基数为2时)

    右规例子:

    规格化浮点数的尾数M的绝对值应满足:1/r≤|M|≤1

    规格化浮点数的特点

    IEEE 754标准

    一般形式

    隐藏表示最高位1

    若尾数是xx...xxx则表示尾数1.xx..xxx

    短浮点数float,单精度

    长浮点数double,双精度

    [规格化的短浮点数的真值:(-1)^S*1.M*2^{E-127} ]

    [规格化的长浮点数的真值:(-1)^S*1.M*2^{E-1023} ]

    浮点数的运算

    加减运算

    浮点数加减运算步骤:

    1. 对阶
    2. 尾数加减
    3. 规格化
    4. 舍入
    5. 判溢出

    0.转换格式(用补码表示阶码和尾数)

    写成小数形式,尾码右移,阶码加

    写成补码(取反+1),题目中要求阶符2位

    扩展尾数:11.011000000

    y也进行相同处理

    1.对阶

    使两个操作数的小数位置对齐。求阶差,小阶变大阶,尾数每右移一位,阶码+1

    11111是-1的补码

    向右移动了1位,阶码+1

    2.尾数加减

    阶码这时候已经相等了。

    尾数相加减,注意,出现了溢出

    3.规格化

    右规,记得阶码+1

    4.舍入

    这里舍掉的是0,无舍入

    “0”舍“1”入法:类似于十进制数运算中的“四舍五入”法,即在尾数右移时,被移去的最高数值位为0,则舍去;被移去的最高数值位为1,则在尾数的末位加1.这样做可能会使尾数又溢出,此时需要在做一次右规。

    恒置“1”法:尾数右移时,不论丢掉的最高数值位是“1”还是“0”,都使右移后的尾数末位恒置“1”。这种办法同样有使尾数变大和变小的两种可能。

    5.判溢出

    常阶码,无溢出,结果真值为2^-3*(-0.1001111)_2

    强制类型转换

    机器字长:机器一次运算所能处理的数据长度

    小转大:不产生任何问题

    范围、精度从小到大,转换过程没有损失。

    [int:范围-2^{31}...2^{31}-1,有效数字32位 ]

    [float:范围±[2^{-126}...2^{127}*(2-2^{-23})],有效数字23+1=24位 ]

    int->float:可能损失精度

    float->int:可能溢出及损失精度

  • 相关阅读:
    CodeForces gym Nasta Rabbara lct
    bzoj 4025 二分图 lct
    CodeForces 785E Anton and Permutation
    bzoj 3669 魔法森林
    模板汇总——快读 fread
    bzoj2049 Cave 洞穴勘测 lct
    bzoj 2002 弹飞绵羊 lct裸题
    HDU 6394 Tree 分块 || lct
    HDU 6364 Ringland
    nyoj221_Tree_subsequent_traversal
  • 原文地址:https://www.cnblogs.com/jev-0987/p/13432381.html
Copyright © 2011-2022 走看看