Какие-нибудь реальные процессоры не используют IEEE 754?

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

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


4 ответа

Решение

Кроме дефектных 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.

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

  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-кибер, поэтому я не мог удержаться от этого, даже если это не было "реальным миром" в течение десятилетий).

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

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

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

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

Другие вопросы по тегам