Могут ли какие-либо процессоры реального мира не использовать 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-машине, поэтому я не мог удержаться от него, даже если он не был "реальным миром" на протяжении десятилетий).
Ответ 3
SPUs Cell Processor отличаются несколькими способами (например, отсутствие INF и NAN), но я не думаю, что есть различия нарушит ваши предположения...
Ответ 4
Процессоры PowerPC (Mac до 2006-2007 гг., тонны текущих серверов IBM) используют 128-битный формат, состоящий из двух удвоений для длинного двойного, вместо этого, если расширенный формат IEEE 754.
Однако в C или Objective-C нет переносимого способа интерпретировать число с плавающей запятой 32-разрядного или 64-битного числа как целое (предполагается, что float и uint32_t, или double и uint64_t имеют одинаковое количество бит). Когда мне нужно было что-то делать, мне пришлось писать разные коды в зависимости от компилятора (один из них использовал объединение, один - путем двойного перевода длинным *). Не знаю, сделает ли переинтерпретатор на С++ портативным.