Шестнадцатеричное число с плавающей точкой, вокруг - PullRequest
1 голос
/ 12 октября 2011

Я пробую следующий пример:

printf("%9.1a",4488.09); //Only one digits has to be printed after digital point

Двоичное представление 4488.09 == 1 0001 1000 1000.0001011100001010001111010111000010100011110101 должно стать 0x1.1p + 12 или 0x1.2p + 12?

Я не могу понять, нужно ли выполнять операцию округления (во время печати) для двоичного представления или для представления 1.18 + 13? И если оно должно выполнить ceil() - 8 находится точно в середине шестнадцатеричного диапазона ...

Ответы [ 2 ]

1 голос
/ 12 октября 2011

Да, когда вы напечатаете f () число 9.1, вы получите округление.

если вы не хотите округлять, вы можете обнулить младшие биты.

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

также здесь, в штате Теннесси, мы не используем слово мантисса.Но мы используем «дробную часть»

1 голос
/ 12 октября 2011

Двоичный код всегда можно преобразовать в десятичный без потерь, если только вы не ограничите число десятичных цифр слишком маленьким числом.Если значение мантиссы имеет значение, аналогичное 1.188170A3D70A4, и вы ограничиваете printf () только одной дробной цифрой, для мантиссы вы должны получить 1,2.Если вы ограничите его до 2 дробных цифр, вы должны получить 1,19.Если 3, то 1.188.Если 4, то 1.1881.И так далее.

...