• 浮点数计算


    浮点数

    单精度浮点数共 32 位 = 1符号位[31] + 8指数位[23-30] + 23有效数字位[0-22]

    双精度浮点数共 64 位 = 1符号位[63] + 11指数位[52-62] + 52有效数字位[0-51]

    指数偏移量(exponent bias),因为浮点数的指数是无符号数,而且指数有正有负,为了使指数能表示正数和负数设置了指数偏移量,小于指数偏移量的为负,反之为正。

    指数偏移量 = 2^(指数位-1)-1。

    单精度浮点数的指数偏移量为127(0111 1111)

    双精度浮点数的指数偏移量为1023(011 1111 1111)

    将十进制小数转换成浮点数

    1. 将十进制小数转换成二进制

    1.1 转换整数部分(除2)
    整数部分除2保留余数,结果继续除2直到结果为0,将所得的余数从后往前依次拼接起来就是二进制数。
    6 / 2 = 3 余 0
    3 / 2 = 1 余 1
    1 / 2 = 0 余 1
    ∴ 6 => 110
    1.2 转换小数部分(乘2)
    小数部分乘2保留结果的整数部分,结果的小数部分继续乘2直到结果的小数部分为0,将所得的整数部分从前往后依次拼接。
    0.8125 * 2 = 1.625 整数 1 小数 0.625
    0.625 * 2 = 1.25 整数 1 小数 0.25
    0.25 * 2 = 0.5 整数 0 小数 0.5
    0.5 * 2 = 1.0 整数 1 小数 0
    ∴ 0.8125 => 0.1101

    1. 确定符号位、指数位和有效数字位

    2.1 符号位 1 表示负数,0 表示正数
    2.2 将二进制小数保留一位整数,小数点左移n位,指数为+n,小数点右移n位,指数为-n,指数位为偏移量+指数
    2.3 保留一位整数之后的小数部分就是尾数(二进制数因为保留一位整数之后,整数部分始终为1)。有效数字位为尾数后面补零

    1. 得出结果

    将符号位、指数位(偏移量+指数)、有效数字位依次拼接起来就是

    例如:-12.75 转换成单精度浮点数

    1. 将十进制小数转换成二进制:-1100.11

    1.1 转换整数部分(除2):-1100
    1.2 转换小数部分(乘2):0.11

    1. 确定符号位、指数位和有效数字位:-1.10011

    2.1 符号位:1
    2.2 指数位:127 + 3 = 128 + 2 = 1000 0000 + 10 = 1000 0010
    2.3 有效数字位:100 1100 0000 0000 0000 0000

    1. 得出结果:1 1000 0010 100 1100 0000 0000 0000 0000

    将浮点数转换成十进制小数

    1. 先确定符号位、指数位、有效数字位

    先根据浮点数位数 确定是单精度还是双精度,然后确定符号位、指数位、有效数字位

    1. 确定符号、指数和小数

    符号位为1则为负数,反之为正数
    指数 = 指数位 - 偏移量
    小数 = 有效数字位去掉右端的0

    1. 得出结果

    小数部分 + 1得到尾数
    指数为+n则小数点右移n位反之左移n位得到二进制小数。
    将二进制小数转换成十进制小数

  • 相关阅读:
    [Leetcode]@python 89. Gray Code
    [Leetcode]@python 88. Merge Sorted Array.py
    [Leetcode]@python 87. Scramble String.py
    [Leetcode]@python 86. Partition List.py
    [leetcode]@python 85. Maximal Rectangle
    0523BOM
    0522作业星座
    0522dom
    0520
    0519作业
  • 原文地址:https://www.cnblogs.com/macho8080/p/14870448.html
Copyright © 2020-2023  润新知