Почему в некоторых случаях по умолчанию используется 80-битное представление?
Поскольку x87 поддерживает 80-битный формат расширенной точности IEEE-754 .Некоторые более поздние платформы, такие как Motorola 6888x, Intel i960 и Itanium, также поддерживают этот тип, поэтому для компиляторов имеет смысл использовать его для long double
вместо того, чтобы прибегать к гораздо более медленной программной эмуляции
Это также причина, по которой PowerPC использует double-double для long double
по умолчанию, поскольку вы можете использовать аппаратный модуль double
, который значительно ускоряет операции.Старые ядра NVIDIA CUDA не имели аппаратной поддержки double
, поэтому многие люди использовали float-float для большей точности.См. Эмуляция FP64 с 2 FP32 на графическом процессоре
Большинство других архитектур не имеют аппаратного обеспечения для типов с плавающей запятой более 64 бит, поэтому они выбрали формат четверной точности IEEE-754для простоты реализации и лучшей прямой совместимости, поскольку, если однажды поддержка 128-битной плавающей запятой придет к реальному оборудованию, это, скорее всего, будет IEEE-754 с четверной точностью.В настоящее время Sparc является единственной архитектурой с аппаратной поддержкой четверной точности
. Тем не менее, большинство компиляторов имеют опции для изменения основного формата для long double
.Например, в GCC есть -mlong-double-64/80/128
и -m96/128bit-long-double
для x86 и -mabi=ibmlongdouble/ieeelongdouble
для PowerPC