簡體   English   中英

加倍和除以浮點值

[英]Doubling and dividing floating point values

我有一個函數,我相信將int轉換為浮點值,拆分為值的符號指數和分數組成部分。 使用IEEE 754表示浮點值。

在此輸入圖像描述

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

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

如果要將二進制表示加倍,則只需要將expoent加1。 如果你想減半,只減1,也是如此

請記住,只有當您的號碼在正常范圍內時才會出現這種情況,包括即使在加倍或減半之后也是如此

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM