抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >
  • IEEE浮点数的浮点表示

    IEEE浮点数表示形如的数

    在位排布上的顺序是符号位 -> 阶码(指数)位 -> 尾数(基数)位

    标准浮点格式

    根据exp位的不同,可以分为如下情况:

    1. 规格化的

      即exp位不全为0或全为1,此时exp被解释为无符号整数,

      而阶码,其中

      而尾数,frac是二进制数的小数部分表示

      在这里规格化数通过隐含一个 1 来最大化尾数的有效位数,从而提高了精度

    2. 非规格化的

      即exp位全为0,此时数字会被特殊处理,

      而阶码****,与规格化的值相同

      而尾数****,frac同样是小数部分表示

      通过Bias的方法,指数位可以用无符号整数表达,这方便计算机处理以及比较不同浮点数

      通过非规格化数的特殊处理,IEEE浮点数可以更精确地表示接近0的小数,并与规格化数平滑转换

    3. 特殊值

      当exp位全为1时,且frac位全为0时,整体表示正/负无穷大,即超出表达范围的结果

      ​ 当frac位不全为0时,此时视作错误NaN,代表无效或无法处理的值

    实际上,IEEE浮点数可表示的值并不是连续的,其在靠近0处更稠密、更精确,而远离0处更稀疏

    浮点数表示范围
  • 浮点数的舍入

    当使用精度有限的浮点数表达实数值时,可能需要进行舍入,舍入包括:

    1. 四舍五入,这是IEEE规定的默认舍入模式,可以尽量减少累计误差
    2. 向上舍入,这时表达值有明确的下界,即
    3. 向下舍入,这时表达值有明确的上界,即
    4. 向零舍入,此时对于负数与非负数,表达值分别有明确的下界和上界,即
    5. 向偶数舍入,此时没有明确的上下界,但是避免了舍入后数的均值偏离原数据的均值
  • 浮点数的运算

    • 浮点运算并不具有结合性,运算结果可能会受到顺序的影响,因为运算中可能产生溢出或精度丢失

      同样的,浮点乘法并不具有可结合性和分配性

    • 当浮点数和整数之间发生类型转换时,可能会有如下情况

      1. int -> float,通常不会产生溢出,但是可能发生舍入
      2. int -> double 或 float -> double,此时数值会被完整保留
      3. double -> float,可能发生精度丢失,若超出范围会溢出为无穷大
      4. float -> int 或 double -> int,在C语言中,最终值会截断,即向零舍入



博客内容遵循 [署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh)
本站使用 Volantis 作为主题
粤ICP备2026019407号