Могут ли какие-либо процессоры реального мира не использовать IEEE 754?

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

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

Ответ 1

Помимо недостающих 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.

Ответ 2

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

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

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

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

Ответ 4

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

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