Я имею в виду, я полагаю, что когда мы используем «float» или «double» в C / C ++, компилятор использует модуль x87, или я ошибаюсь?
На современных процессорах Intel компилятор может использовать регистры SSE / AVX. FPU часто не используется регулярно.
Я просто хотел знать, как ЦП «преобразовывает» число с плавающей запятой.
Преобразование целого числа в число с плавающей запятой. номер точки - это вычисление, которое в основном (за исключением некоторых деталей):
- Начинается с двоичного (для беззнаковых типов) или двоичного дополнения (для подписанных типов) представления целого числа.
- Если число равно нулю, вернуть все биты ноль.
- Если оно отрицательное, запомните это и отмените число, чтобы сделать его положительным.
- Найдите самый высокий бит, установленный в целом числе.
- Найдите самый младший бит, который будет соответствовать значению формата назначения. (Например, для формата binary32 IEEE-754, обычно используемого для
float
, 24 бита подходят в мантиссе, поэтому 25 th бит после самого высокого набора битов не подходит.) - Округлите число в той позиции, где заканчивается мантисса.
- Вычислите показатель степени, который является функцией того места, где установлен самый высокий бит. Добавьте «смещение», используемое при кодировании экспоненты (127 для двоичного 32, 1023 для двоичного 64).
- Соберите знаковый бит, биты для экспоненты и биты для мантиссы (опуская старший бит, потому что он всегда один). Верните эти биты.
Это вычисление подготавливает биты, представляющие число с плавающей запятой. (Он опускает детали, связанные с особыми случаями, такими как NaN, бесконечности и субнормальные числа, потому что они не возникают при преобразовании типичных целочисленных форматов в типичные форматы с плавающей запятой.)
Это вычисление может выполняться «программно» (что есть с общими инструкциями для сдвига битов, проверки значений и т. д.) или «аппаратно» (то есть со специальными инструкциями для выполнения преобразования). На всех настольных компьютерах есть инструкции для этого. Маленькие процессоры для встроенного специального назначения могут не иметь таких инструкций.