得到浮点数的指数

时间:2016-02-26 03:47:22

标签: c floating-point precision

我刚刚开始学习浮点并了解中小企业的东西。我对尾数仍然很困惑......有人可以向我解释如何获得浮动的exp部分。我很抱歉,如果这是一个非常愚蠢和基本的问题,但我很难理解它......

另外,我如何实现以下功能......显然我的实现是错误的。但是我该怎么做呢?

// Extract the 8-bit exponent field of single precision
// floating point number f and return it as an unsigned byte
unsigned char get_exponent_field(float f)
{
// TODO: Your code here.
int bias = 127;
int expp = (int)f;
unsigned char E = expp-bias;

return E;
}

2 个答案:

答案 0 :(得分:1)

如果要从float值(超过127表示法)中提取 IEEE-754单精度指数,可以使用float函数,或者您可以使用带有 shift 掩码的简单联合来执行相同操作:

unsigned float_getexp (float f)
{
    union {
        unsigned u;
        float f;
    } uf;
    uf.f = f;
    return (uf.u >> 23) & 0xff;
}

如果你想要实际指数 bias (即在隐藏位去除之前的标准化过程中尾数小数移位的位数),只需减去{{1}从返回的值开始,或者如果你想要返回的值,在返回之前减去它。

尝试一下,如果您有疑问,请告诉我。 (注意: 127应该是type代表你的指数,而不是你拥有的unsigned

答案 1 :(得分:0)

首先,获取浮点数并通过分别转换积分和小数部分来计算其二进制形式。一旦你得到了,说你有11010.101(基数为2)。 规范化二进制字符串:1.1010101 x 2 ^ 4。接下来,将超出的值(比如超过15)添加到sci的指数中。不。价值,这将给你19(基数十)。将其转换为base-two;这将是你的指数。

这只是操作的结构,插入你自己的偏见等。