• IEEE 754 浮点数机器表示标准


    32位字长浮点数:

    共32位

    1

    8

    23

    符号位

    解码

    尾数

    0 +    1 -

    移127码

    原码,隐含小数点前的首位1

    不同数据类型之间转换时,隐藏着一些不容易被察觉的错误,比如int 和 unsigned

    1. int 2 float时,有效数字可能舍去。

    2. int转为double时,理论上是安全的

    3. double转为float时,可能发生溢出,数据可能被舍入。

    4. 32位架构unsigned int经验上限:2^32 -1 = 4294967295 // 42亿9千万

    特别的:

    1. 全0解码全0尾数: +0和-0,+/-取决于符号位

    2. 全0阶码非全0尾数:非规格化数

    用于处理阶码下溢,使得出现比最小规格化数更小的结果时,程序能继续运行。

    3. 全1阶码全0尾数: +无穷或负无穷,取决于符号位。

    可能按NaN,非数处理

    也可能产生明确的结果。

    4. 全1阶码非0尾数:NaN

    非数,NaN,根据尾数最高位的不同决定是否进行异常处理。

    5. 阶码非全0非全1:规格化非0数

    因为特殊值的存在,除去全0全1解码后,单精度阶码个数为254,最大阶数为127。

    C语言中 float 和 double 分别对应IEEE753的单精度和双精度。

    但 long double 要根据处理器微架构做改变。

    比较新的新事物尚未有统一标准。

    补充:Intel采用80位双精度扩展格式(Long double),相比IEEE754,它的尾数没有隐藏位,有效位共64位。

    http://ideone.com/

    可以在这个网站在线调试运行结果。

  • 相关阅读:
    ubuntu用apt-get安装memcache
    Vagrant error: Your VM has become inaccessible.
    PHP数据类型转换
    vim 树形目录插件NERDTree安装及简单用法
    mysql 导入sql文件,source命令
    linux:vi 替换命令
    svn更改分支名字,move命令
    Subversion命令汇总
    不解压直接查看tar包内容
    ls按时间排序输出文件列表
  • 原文地址:https://www.cnblogs.com/learn-to-rock/p/computersystem1011.html
Copyright © 2020-2023  润新知