Double - IEEE 754 альтернативы - PullRequest
       4

Double - IEEE 754 альтернативы

6 голосов
/ 23 февраля 2012

По данным следующего сайта: http://en.cppreference.com/w/cpp/language/types

«тип с плавающей запятой двойной - двойной точности. Обычно IEEE-754 64-битный тип с плавающей точкой».

Там написано "обычно". Какие еще возможные форматы / стандарты может использовать C ++ double? Какой компилятор использует альтернативу формату IEEE? Или архитектура?

Ответы [ 4 ]

6 голосов
/ 23 февраля 2012

Vaxen, Crays и мэйнфреймы IBM, и это лишь некоторые из них, которые все еще широко используются.Большинство (все?) Из них также могут теперь делать IEEE с плавающей запятой, но иногда только со специальным дополнением.В других случаях (IBM) арифметика IEEE может привести к значительному снижению скорости.

Что касается более старых машин, большинство мейнфреймов (Unisys, Control Data и т. Д.) Использовали уникальные форматы с плавающей запятой, большинство из которых даже не былоочень похоже на IEEE, не говоря уже о том, чтобы соответствовать.

3 голосов
/ 23 февраля 2012

Для краткого урока истории вы можете ознакомиться с Примером с плавающей запятой Intel .

Компиляторы Intel имеют опцию, которая по умолчанию включена при оптимизации и включает так называемые функция быстрой математики .Это делает математику намного быстрее, но снижает строгое соответствие стандартам IEEE.Можно обеспечить строгое соответствие стандартам с опцией fp-model .

Я считаю, что язык CUDA для графических процессоров NVidia также имеет значительно более быструю математическую библиотеку, если кто-то готов отказаться от строгого соответствия стандарту IEEE.Это не только ускоряет математику, но и уменьшает количество регистров, используемых, в частности, для трансцендентных функций.

Необходимость соблюдения зависит от каждого конкретного случая.У нас возникли проблемы с оптимизацией Intel, и нам пришлось включить опцию fp-model strict, чтобы обеспечить правильные результаты с математикой двойной точности.

2 голосов
/ 23 февраля 2012

Кажется, что большинство компьютеров сегодня используют IEEE-754. Но альтернативы, кажется, были доступны раньше. Форматы, такие как превышение 128 и упакованный BCD, использовались ранее (http://aplawrence.com/Basics/floatingpoint.html). В записи в Википедии также есть несколько перечисленных http://en.wikipedia.org/wiki/Floating_point

0 голосов
/ 15 сентября 2015

Вероятно, стоит добавить в ответ на вопрос «Какие еще возможные форматы / стандарты мог бы использовать C ++ дважды?», Что gcc для Atmel AVR (которые представляют собой 8-битные ЦП данных, используемые в некоторых Arduinos) не реализует doubleкак 64 бита.

См. вики GCC, страница avr-gcc и, в частности, подраздел 'double' 'Отклонения от стандарта' , где написано

double имеет ширину всего 32 бита и реализован так же, как и float

Я считаю, что другие процессоры имеют аналогичные реализации, но я не смог их найти.

...