V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
bler
V2EX  ›  程序员

一道计算机组成原理中有关规格化浮点数最大负数的疑惑

  •  
  •   bler · 51 天前 · 1201 次点击
    这是一个创建于 51 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如图所示





    这道题中,最大负数抱有疑惑,假设尾数是 4 位,绝对值最小的数就是 -0.100 也就是- 2^-1

    1.100 的按照求反加一的计算公式,我算出来原码还是 1.100 ,这不就是一个规格化的吗,
    感觉学习的还是有问题,但是不知道问题在哪

    有大佬能解释一下吗

    主要是解释为啥是 2^-1 +2^-n,为什么加这个 2^-n
    还是以 4 位尾数为例子,补码就是 0.101 ,原码就是 0.011

    感觉脑子有点乱啊,我感觉是边界问题我没掌控好
    10 条回复    2024-11-06 15:17:07 +08:00
    ltyj2003
        1
    ltyj2003  
       51 天前 via Android
    -0.001 大于-0.100
    bler
        2
    bler  
    OP
       51 天前
    @ltyj2003 不是这个原因,其实这个问题的本质就是为什么-0.1 (二进制形式),为什么不是规格化的浮点数,为什么还要加个 2^-n ,我感觉我对规格化浮点数的概念好像理解错了
    cybort
        3
    cybort  
       51 天前 via Android
    因为你没有把小数部分的精度用完,你没发现同一个数移动下小数点位置有无数种表示形式吗
    bler
        4
    bler  
    OP
       51 天前
    @cybort 但是需要规格化啊,尾数最高位必须为 1 啊,假设尾数是 4 位,如果是正数那么尾数最小为 0.100

    如果是负数的情况下,尾数就不能为-0.100 ,变成了了-0.1001 了,加的这个 2^-n 有点把我搞蒙了,这是我有点不明白的地方
    fengYH8080
        5
    fengYH8080  
       51 天前
    大概了解你的疑惑了,你应该是概念混淆或者是不够牢固。 [双符号位补码尾数的规格化] 正数是 00.1xxxx ,负数是 11.0xxxx ,所以题目中 11.0111 补码转化为原码后 11.1001 ( 2^-1 + 2^-4 )是没问题的。而你举的例子 1.1000 这个是原码的规格化,你转换为补码 1.1000 后,正确的尾数规格化是 1.0100 。你理清下原码尾数的规格化和补码尾数的规格化的差异和原理。
    bler
        6
    bler  
    OP
       50 天前
    @fengYH8080 谢谢大佬,那就应该是概念问题了,应该是哪些概念漏学了,看的是哈工大的计算机组成原理,看到这里就有点懵逼了,回头去再看了一遍也没明白这玩意儿
    bler
        7
    bler  
    OP
       50 天前
    那这样的话,补码 11.011....1 的原码就是 11.100...1 了,

    而 11.100...的原码是 11.100...0 ,这就不符合补码需要 11.0xxx 规则,

    那么在原码的基础上加上一个Δ 2^-n ,11.100...1 的补码就是 11.011...1

    应该是视频中少了那部分内容或者是我没仔细听导致的问题
    fengYH8080
        8
    fengYH8080  
       50 天前
    @bler #7 这个你不要反过来去理解,你按逻辑去推导,阶码部分比较简单就不说了,尾数规格化一定是 11.0xxx...xxx ,然后负得越少那就越大,补码是会有取反的步骤,0 会反 1 ,1 会反 0 ,所以 x 要取 1 才会是绝对值最小,就可以得出最大负数 11.0111...111 了。因为我们熟悉十进制,所以总会想通过 2 的次方去找结果,多转换下二进制的逻辑,补码就针对补码去思考,原码就针对原码去思考。
    bler
        9
    bler  
    OP
       50 天前
    @fengYH8080 大佬牛皮,直接用补码去计算边界情况,这种逆向思维我有时候转不过来,补码的数值大小有时候还是不够直观的,毕竟是原码取反后的数

    我是想着从原码上往数轴负数方向移动个Δ,一个一个试试,求出它的补码,看一下补码是否满足规则
    bler
        10
    bler  
    OP
       50 天前
    你这种方式求出结果更快,利用规则,再利用补码的特性,快速定位到结果了,我这种有点大海捞针的感觉
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1004 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 21:24 · PVG 05:24 · LAX 13:24 · JFK 16:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.