Я изучаю курс операционной системы в колледже, и недавно мы узнали, как числа с плавающей запятой представляются в памяти.
Наша домашняя работа о преобразовании плавающих чисел (float
s) в их двоичные представления вручную.
например. 200,0234375
выдаст 01000011010010000000011000000000
после длительного процесса преобразования.
Один из вопросов о том, как 0,1f будет представлен в памяти. Итак, я выполнил весь процесс конвертации и закончил так:
00111101110011001100110011001100
С тем, что мы узнали до сих пор, это правильный ответ на вопрос (я спросил учителя).
Но по следующему вопросу нас просят проверить ответ с помощью программы, чтобы увидеть фактическое двоичное представление 0,1f. Реальное представление таково:
00111101110011001100110011001101
(обратите внимание на последний бит)
Затем нас просят угадать, почему это происходит.
Я заметил периодический 0011
при преобразовании числа, и поскольку следующий бит после конечного 0
будет 1
, я бы предположил, что компьютер округлит это окончательное 0
до 1
, что объясняет разницу.
Итак, я хочу знать, я прав? Компьютер округляет последний бит на основе того, что будет следующим битом при использовании 23 битов мантиссы?
Это домашнее задание, поэтому, если бы вы могли просто направить меня к ответу, если я ошибаюсь, я был бы признателен.
Кроме того, я не смог найти ответ на свой вопрос от Google, используя ключевые слова, которые я мог придумать. Простите, если это дубликат.