• 浮点数表示法(总结自CS61C和CMU CSAPP)


    在这里插入图片描述

    • 总结自伯克利的CS61C2021秋季课程,Nick主讲和CMU2015年讲CS APP的课程,标题均是floating point,相比而言CMU讲得比较详细,我先看了一遍CS61C再看了一遍CMU的课程,点击floating point点击slides可以下载pdf(讲得很详细可以自己看一下,我挑了几张贴出来),课程主页https://inst.eecs.berkeley.edu/~cs61c/fa21/
      在这里插入图片描述

    • P&H是课本章节,中文版是计算机组成与设计硬件软件接口RISCV
      在这里插入图片描述

    • 还有个浮点数网站可以玩一玩https://www.h-schmidt.net/FloatConverter/IEEE754.html
      在这里插入图片描述

    • 浮点数表示法是伯克利提出的,因为小数点是可以浮动的,降低了精度但是表示范围变大了(Can represent a very large range with roughly the same “precision”),而且希望和整数的补码表示法一致(32个0还是0),并且希望不用对浮点数进行比较就能排序(Make it possible to sort without needing to do floating-point comparisons)

    • float是单精度32位4字节,double是8字节双精度,先掌握float,float不能表示的就有+∞, -∞, Not-A-Number (NaN), exponent overflow, exponent underflow, +/- zero这么多种特殊情况,能表示的又分为normal format和denorm,最大可表示到 2 127 = 2 120 ∗ 2 7 = 128 ∗ ( 2 10 ) 12 = 128 ∗ 1 0 36 = 2 ∗ 1 0 38 2^{127}=2^{120}*2^7=128*(2^{10})^{12}=128*10^{36}=2*10^{38} 2127=212027=128(210)12=1281036=21038,根据 2 10 = 1 0 3 2^{10}=10^3 210=103换算得到
      在这里插入图片描述

    • 偏置计算方法bias = 2 ^ (k - 1) - 1,k 是指数位数,8位指数计算得到bias = 127(正数负数各站一半,bias gives us a balanced value),小数部分可以表示为fraction, F, mantissa, M, significand
      在这里插入图片描述

    • 先掌握normal format,即1.xxx
      在这里插入图片描述

    • denorm format用于表示0附近的数,0.xxx,指数部分为0000_0000,此时小数部分不需要+1,然后指数部分E = 1 - Bias(这一部分CMU讲得比较好,为了实现两种表示方法的平滑过渡,可以用8位数字,指数部分k = 4偏置为7,小数部分为3位),老师当时评论those IEEE folks are really smart
      在这里插入图片描述

    • overflow部分指数部分为1111_1111,首先是Inf然后是NaN,NAN通常是sqer(-1)或者0/0,NAN不能比较大小,+INF是1.0/0.0,-INF是-1.0/0.0,INF可以比较大小
      在这里插入图片描述

    • 浮点数中存在+/- 0,表示太小而不能表示的数字
      在这里插入图片描述

    • 总结一下
      在这里插入图片描述

    • 如何比较浮点数,先比较符号位再比较指数(无符号比较,使用偏置可以直接比较大小,如果使用补码不能直接比较大小),最后比较小数部分(指数部分比较重要用于区分数字分布,在数轴上可以看出)
      在这里插入图片描述

    • CMU课程中得C代码可以写一下,看下是如何得到NAN和INF的,直接定义a = 1e20,CMU课程中老师讲得好,这些0和1其实不是真实的数字,只是我们看待问题的角度不同(大意)

  • 相关阅读:
    SOLIDWORKS 2023交互设计新功能——协作处理团队数据 简化繁琐操作
    多模块项目中Mybatis的Mapper内部方法找不到的解决办法
    【lesson2】数据库的库操作
    Flask框架配置celery-[1]:flask工厂模式集成使用celery,可在异步任务中使用flask应用上下文,即拿即用,无需更多配置
    Vue常见指令补充(附加案例)
    SpringBoot读取properties中配置的List集合
    MATLAB程序设计与应用 3.4 矩阵的特征值与特征向量
    NoSQL 与传统数据库的集成
    机器学习特征预处理
    Java底层HashMap的如何解释?
  • 原文地址:https://blog.csdn.net/xiong_xin/article/details/125430519