В каком формате числа представлены на современных компьютерах? - PullRequest
1 голос
/ 09 марта 2019

Я читал о представлении чисел в двоичном виде, знаковых величин, дополнения 1, дополнения 2, IEEE 754 для чисел с плавающей запятой и о том, как они могут быть реализованы в схемах, и мой вопрос: какой стандарт двоичныхпредставление используют современные компьютеры?

1 Ответ

2 голосов
/ 09 марта 2019

Для протоколов хранения или сетевых протоколов все может быть во всех видах форматов, в зависимости от того, что лучше всего хранить данные и насколько оптимизированными, по мнению программистов, это должно быть. Вы можете найти некоторые дурацкие форматы; например, протокол, который я написал несколько месяцев назад, имел бит знака как наименее значимый бит с кодировкой base64. Таким образом, отрицательные целые числа не занимают чрезмерных байтов, если они на самом деле не являются очень большими числами, в то время как дополнение к двум заполняет весь размер поля "-1". По этой причине Google Protocol Buffers делает то же самое, используя кодировку ZigZag для чисел со знаком.

Что касается более прямого ответа на вопрос: для каждодневных обычных современных вычислений, дополняет два, безусловно, является наиболее распространенным внутренним представлением для целых чисел. Я знаю, что на большинстве компьютеров есть специальные флаги и инструкции для размещения арифметики дополнения Two, такие как флаг «переносить» для обнаружения переполнений и флаг «подписывать» для обнаружения, если в результате установлен самый старший бит.

С числами с плавающей запятой дела обстоят немного сложнее, хотя IEEE 754 кажется наиболее распространенным для вычислений. Мои арифметические знания с плавающей запятой довольно устарели, так что мы приветствуем любые исправления. В последний раз я проверял (как 10 лет назад), что современные FPU используют «реальную» точность во время вычислений - в том смысле, что их регистры имеют 80-битный формат, а затем при хранении данных или получении результатов из FPU они преобразуются в одиночные или двойная точность (32 или 64 бита) в зависимости от программы.

Усовершенствованное современное программное обеспечение на современных процессорах также имеет доступ к более мощным операциям с плавающей запятой (SIMD - Multiple Data с одной инструкцией), предназначенным для работы с векторами или другой сложной математикой, где требуется много обработки данных (фильтры изображений, аудиокодеки, процедурная генерация и т. д.), но используемые здесь регистры - это всего лишь несколько множественных экземпляров общих форматов с плавающей точкой или целых чисел.

Как указано в комментариях, инструкции SIMD становятся все более популярными в наши дни среди операций с плавающей запятой. Они гораздо более мощные с точки зрения производительности, и почти каждый процессор в наши дни (в мире ПК / архитектура x86) имеет доступ к минимум набору инструкций SSE2 (датированный 2000 годом / Pentium 4) , Я не думаю, что программное обеспечение склоняется к точности по сравнению с производительностью, и все, что действительно требует высокоточных вычислений, вероятно, все равно использует пользовательскую арифметику (например, банковское программное обеспечение не использует операции с плавающей запятой, поэтому они не теряют доли копеек из-за ошибок округления - или, что более важно, любые пенни, потерянные или полученные в результате округления, одинаковы для всех машин).

...