Почему типы с фиксированной запятой не включены в C99? - PullRequest
10 голосов
/ 27 марта 2012

К счастью, модификатор типа complex был введен в стандарт C99.Чего я не понимаю, так это почему было решено отказаться от поддержки арифметики с фиксированной запятой (в частности, поддерживать дробные типы, такие как 1.15 {подписанный} или 0.32 {беззнаковый}), где эти типы так важны для программирования DSP?

GCC поддерживает это через расширение?

Ответы [ 3 ]

9 голосов
/ 27 марта 2012

Это обсуждалось / предлагалось (например, в N938 , N953 ), но эти документы предлагали его только как расширения, а не как дополнение к основному стандарту. По-видимому, это привело к его включению в N1169 , который является проектом TR 18037 («Расширения для поддержки встроенных процессоров»), но это не считается завершенным (и, похоже, проект не является были обновлены довольно давно).

Я предполагаю (хотя это только предположение), что работа над ним, вероятно, была прекращена (хотя бы временно), чтобы сконцентрироваться на завершении C11. Возобновится ли работа над ним сейчас, вероятно, будет зависеть от того, есть ли еще люди, которые все еще заботятся. Написание и подача статьи, основанной на более ранних из них, которая охватывает больше деталей, предоставляет больше подтверждающих доказательств и т. Д., Может помочь вернуть ее в движение (хотя я, очевидно, не могу ничего гарантировать).

9 голосов
/ 27 марта 2012

Чтобы ответить на вопрос «Поддерживает ли GCC их через расширение», мы можем привести цитату из «Использование коллекции компиляторов GNU» (для GCC версии 4.4.0 - для пояснения добавлены маркеры). (Эквивалент URL GCC 4.9.0: Fixed Point & mdash; Использование коллекции компиляторов GNU (GCC) , но этот раздел - 6.15 вместо 5.13.)

§5.13 Типы с фиксированной точкой

В качестве расширения компилятор GNU C поддерживает типы с фиксированной запятой, как определено в N1169 проект стандарта ISO / IEC DTR 18037. Поддержка типов с фиксированной точкой в ​​GCC будет развиваться по мере изменения в техническом отчете. Соглашения о вызовах для любой цели также могут измениться. Не все цели поддерживают типы с фиксированной запятой.

Типы с фиксированной точкой:

  • short _Fract, _Fract, long _Fract, long long _Fract,
  • unsigned short _Fract, unsigned _Fract, unsigned long _Fract, * unsigned long long _Fract * 1023
  • _Sat short _Fract, _Sat _Fract, _Sat long _Fract, _Sat long long _Fract,
  • _Sat unsigned short _Fract, _Sat unsigned _Fract, _Sat unsigned long _Fract, _Sat unsigned long long _Fract
  • short _Accum, _Accum, long _Accum, long long _Accum,
  • unsigned short _Accum, unsigned _Accum, unsigned long _Accum, unsigned long long _Accum
  • _Sat short _Accum, _Sat _Accum, _Sat long _Accum, _Sat long long _Accum,
  • _Sat unsigned short _Accum, _Sat unsigned _Accum, _Sat unsigned long _Accum, _Sat unsigned long long _Accum.

Значения данных с фиксированной точкой содержат дробные и необязательные составные части. Формат данные с фиксированной точкой различаются и зависят от целевой машины.

С текстом проекта можно ознакомиться здесь .

0 голосов
/ 27 марта 2012

Как сказал Карл в комментарии, фиксированная точка - это то же самое, что и целое число. Я полагаю, что язык мог бы добавить возможность выполнять масштабирование для вас после mult / div (это будет примерно на том же уровне, что и для типов указателя на VLA: очистка синтаксиса путем скрытия арифметики масштабирования для вас), но с учетом Различный диапазон шкал и сочетание типов (например, фиксированное 8,24 фиксированное 24,8 или фиксированное целое число), которые люди хотят использовать с фиксированной запятой, было бы очень трудно охватить все это хорошо.

Другим важным вопросом является разграничение целей. Фиксированная точка - это почти всегда хак для скорости за счет корректности (и, как таковая, намного легче бросить свою). Арифметика с плавающей запятой, включая новую комплексную поддержку в C99, предназначена для получения точных результатов с известными границами ошибок, защиты от ложных переполнений и т. Д. Комплексная поддержка C99 делает для вас гораздо больше, чем просто НАЙТИ свои сложные биномы для вас. , Он скрывает всю тяжелую работу, направленную на то, чтобы ваши результаты не были разбиты угловыми делами.

...