Какие-нибудь реальные процессоры не используют IEEE 754? - PullRequest
30 голосов
/ 10 февраля 2010

Я оптимизирую функцию сортировки для библиотеки числовых данных / статистики, исходя из предположения, что после фильтрации любых NaN и выполнения небольшого переворота числа с плавающей точкой можно сравнивать как 32-разрядные целые числа без изменения результата, а удваивать можно сравнивать как 64-битные целые

Кажется, что это ускоряет сортировку этих массивов где-то порядка 40%, и мое предположение остается верным, пока представление чисел с плавающей запятой на уровне битов - IEEE 754. Существуют ли какие-либо реальные процессоры, которые люди на самом деле использовать (исключая во встроенных устройствах, на которые не ориентирована эта библиотека), которые используют какое-то другое представление, которое может нарушить это предположение?


Ответы [ 5 ]

21 голосов
/ 10 февраля 2010

За исключением дефектных Pentiums , любой процессор на базе x86 или x64 использует IEEE 754 в качестве арифметического стандарта с плавающей точкой.

Вот краткий обзор стандартов FPA и их принятия.

IEEE 754:       Intel x86, and all RISC systems (IBM Power
                and PowerPC, Compaq/DEC Alpha, HP PA-RISC,
                Motorola 68xxx and 88xxx, SGI (MIPS) R-xxxx,
                Sun SPARC, and others);

VAX:            Compaq/DEC

IBM S/390:      IBM (however, in 1998, IBM added an IEEE 754
                option to S/390)

Cray:           X-MP, Y-MP, C-90; other Cray models have been
                based on Alpha and SPARC processors with
                IEEE-754 arithmetic.

Если вы не планируете поддерживать свою библиотеку на довольно экзотических архитектурах ЦП, можно с уверенностью предположить, что на данный момент 99% ЦП соответствуют стандарту IEEE 754.

13 голосов
/ 10 февраля 2010

Это зависит от того, где вы проводите грань между «реальным миром» и воображаемым.

  1. Формат Vax G по-прежнему поддерживается на машинах Alpha (которые, по словам HP, будут поддерживаться как минимум в течение 2013 года).
  2. Шестнадцатеричная FP IBM все еще поддерживается мэйнфреймами IBM z-серии. Они добавили двоичную и десятичную поддержку IEEE, но, как я слышал, они редко используются, потому что шестнадцатеричная FP немного быстрее (IBM оптимизирует ее уже около 45 лет ...)

До недавнего времени Unisys все еще продавал сервировки ClearPath IX, поддерживающие формат Burroughs FP, и машины ClearPath MCP, поддерживающие формат Univac FP. Я полагаю, что теперь они работают только в эмуляции (на Xeons), но с точки зрения программного обеспечения они, вероятно, будут продолжать активно использоваться еще десятилетие или более.

Есть даже несколько человек , использующих DtCyber ​​ для запуска Платона на (эмулируемых) мэйнфреймах Control Data с их уникальным форматом с плавающей запятой. (Извините, но мое первое серьезное программирование было на машине с CDC-кибер, поэтому я не мог удержаться от ее появления, даже если это не было «реальным миром» в течение десятилетий).

4 голосов
/ 31 августа 2014

Процессоры PowerPC (Macs до 2006-2007 гг., Тонны современных серверов IBM) используют 128-битный формат, состоящий из двух двойных для длинного двойного, вместо расширенного формата IEEE 754.

Однако в C или Objective-C не существует переносимого способа интерпретировать 32-битное или 64-битное число с плавающей запятой как целое число (при условии, что float и uint32_t, или double и uint64_t имеют одинаковое количество бит). Когда мне нужно было делать такие вещи, мне приходилось писать различный код в зависимости от компилятора (один использовал объединение, другой - приведение double * к long long *). Не знаю, будет ли реинтерпретация в C ++ делать это переносимо.

4 голосов
/ 10 февраля 2010

SPU процессора сотовой связи отличаются в нескольких отношениях (например, отсутствие INF и NAN), но я не думаю, что различия могут нарушить ваши предположения ...

0 голосов
/ 23 марта 2019

Многие реальные процессоры не имеют собственного формата с плавающей запятой. Многие реализации C и других языков для таких процессоров объединяют библиотеки, которые используют форматы IEEE-754 одинарной и двойной точности и опускают формат расширенной точности, несмотря на то, что другие форматы будут более подходящими для многих целей.

...