首页 文章

非规范化IEEE

提问于
浏览
-1

我正在研究涉及IEEE双精度浮点标准的数字设计项目(Verilog) .

我有一个关于IEEE浮点数表示的查询 . 在IEEE浮点表示中,数字以标准化格式表示,这意味着默认情况下有效位为1(也称为隐藏位) .

当浮点数被去标准化时,有效位被认为是0,并且通过将小数点向左移位来使指数为0 .

我的询问是关于去规范化程序 . 例如,如果指数可以高达120,在这种情况下,我们如何处理小数位(IEEE为43位 - 双精度)?

我们是否做到以下几点

1)增加分数的宽度?即43分数比特去标准化=> 43例如43 120 = 163比特?

2)简单地移动位并保持分数的宽度不变?即丢弃过多的比特?

3 回答

  • 1

    IEEE二进制浮点中唯一的非标准化数字是指数字段中为零的数字,对应于可能的最小指数 . 它们保持正常的分数宽度,因此前导零的数量增加,精度降低 . 对于小数字来说,这是一个很好的权衡,使下溢更平滑 .

  • 0

    两条评论 .

    首先,双精度(64位)浮点数对于尾数有52个显式位,加上一个隐含位(如您所述,不是43位) .

    其次,只有具有全比特零指数的值被解释为非规范化 . 当值接近零时,这允许精度优雅地降级 .

  • 0
    ******************************************************************************************
    HERE IS THE CODE I IMPLEMENTED FOR DENORMALIZATION OF A IEEE 754 DOUBLE PRECISION NUMBER
    ******************************************************************************************
    
    module denorm_orig(D_in, Dnorm); 
    
    input  [63:0]D_in;        // In IEEE 754 double precision format 
    output reg [63:0]  Dnorm;  
    
    reg [63:0] fract_U1;
    reg [10:0] exponent_U1;
    
    always@(*) begin
    
    fract_U1 = {1'b1,D_in[51:0],11'b0};           // Fraction part - denormalized 64 bits 
    exponent_U1  = (11'd1022- D_in[62:52]);       // Exponent part 
    
    fract_U1 = (exponent_U1[5])?{32'b0,fract_U1[63:32]}: {fract_U1 };   // Check if this (32nd or 5th) bit is zero , if not zero , then  keep the value as it is 
    fract_U1 = (exponent_U1[4])?{16'b0,fract_U1[63:16]}: {fract_U1 };   
    fract_U1 = (exponent_U1[3])?{ 8'b0,fract_U1[63:8 ]}: {fract_U1 };   
    fract_U1 = (exponent_U1[2])?{ 4'b0,fract_U1[63:4 ]}: {fract_U1 };   
    fract_U1 = (exponent_U1[1])?{ 2'b0,fract_U1[63:2 ]}: {fract_U1 };   
    fract_U1 = (exponent_U1[0])?{ 1'b0,fract_U1[63:1 ]}: {fract_U1 };   
    
    Dnorm = fract_U1 [63:55];
    
    end
    
    endmodule
    

相关问题