加倍和除以浮点值

时间:2016-07-21 04:35:11

标签: c++ c floating-point bits

我有一个函数,我相信它会将一个int转换成一个浮点值,分成符号指数和值的分数组成部分。使用IEEE 754表示浮点值。

enter image description here

unsigned test(unsigned x) {    
    // split the given bits of sign exponent and fraction, combine to return

    unsigned int sign = (x & 0x80000000) >> 31;
    unsigned int expo = (x & 0x7F800000) >> 23;
    unsigned int frac = (x & 0x007fffff);

    return (sign << 31) | (expo << 23) | frac;
}

我不确定如何从这个浮点表示中计算减半或加倍的值。

unsigned doubled(unsigned x) {
    // get float
    // float = unsigned int to float
    // doubleFloat  = 2*f
    // if float is not a number
        // return unsigned float
    // else return unsigned integer of half float

    unsigned int sign = (x & 0x80000000) >> 31;
    unsigned int expo = (x & 0x7F800000) >> 23;
    unsigned int frac = (x & 0x007fffff);

    if (expo == 0xff)
        return uf;
    else ...
}

1 个答案:

答案 0 :(得分:6)

您似乎使用IEEE 754来表示Float值。

如果要将二进制表示加倍,则只需要将expoent加1。如果你想减半,只减1,

也是如此

请记住,只有当您的号码在正常范围内时才会出现这种情况,包括即使在加倍或减半之后