Gleitkommawerte verdoppeln und dividieren

Ich habe die Funktion, von der ich glaube, dass sie ein int in einen Gleitkommawert umwandelt, der in die Komponenten Vorzeichenexponent und Bruch des Werts aufgeteilt wird. Verwendung von IEEE 754 zur Darstellung von Float-Werten.

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;
}

Ich bin mir jedoch nicht sicher, wie ich die halbierten oder verdoppelten Werte aus dieser Gleitkommadarstellung berechnen könnte.

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 ...
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage