Незначительная ошибка при извлечении дробной части числа плавающего формата IEEE 754 - PullRequest
0 голосов
/ 21 июня 2020

Итак, у меня есть эта функция, в которой я извлек свою дробную часть данного int, чтобы я мог вывести ее в шестнадцатеричной форме.

Вот мой код, где результат - дробная часть который я затем печатаю в шестнадцатеричной форме.

// getting fraction part
    result = 0;
    int count = 0;
    for (int which_digit = 23; which_digit >0; which_digit--) {
        shifted_value = f >> (23 - count);
        int fractionn = (shifted_value & 1) * (1 << which_digit) ;
        result += fractionn;
        count++;
    }

Если мне задано число 8, моя программа правильно печатает шестнадцатеричную форму дробной части. Однако, учитывая другое число, например -0.749000013, моя программа печатает 0x3fbe76 вместо 0x3fbe77.

Кто-нибудь знает, где я ошибся

1 Ответ

2 голосов
/ 21 июня 2020

Ваше конечное условие l oop - which_digit > 0, поэтому вы пропускаете бит # 0. Это должно быть which_digit >= 0. Вам также следует начать с бита 22, а не 23.

Тем не менее, весь ваш l oop может быть заменен простым result = f & 0x7fffff;. Нет необходимости go бит за битом.

...