Предполагается, что C99 преодолеет такие преграды с конкретными интегральными размерами.
Нет, эти типы (u)intN_t
фиксированной ширины полностью необязательны a> потому что не все процессоры используют размеры типов, равные степени 2. C99 требует, чтобы были определены только (u)int_fastN_t
и (u)int_leastN_t
. Это означает, что предпосылка , почему несогласованность в стандарте по сравнению с типами int просто неверна, потому что нет согласованности в размере типов int
Многие современные DSP используют 24-битное слово для 24-битного звука. Существуют даже 20-битные DSP, такие как семейство Zoran ZR3800x или 28-битные DSP, такие как ADAU1701, который позволяет преобразовывать 16/24-битный звук без обрезки. Многие 32- или 64-разрядные архитектуры также имеют регистры нечетного размера, позволяющие накапливать значения без переполнения, например TI C5500 / C6000 с 40-бит long
и SHARC с 80-битным аккумулятором. Серия Motorola DSP5600x / 3xx также имеет необычные размеры: 2-байтовые короткие, 3-байтовое int, 6-байтовое. В прошлом было множество архитектур с другими размерами слов, такими как 12, 18, 36, 60-битные ... и множество процессоров, использующих дополнение знака величин. См. Экзотические архитектуры, о которых заботятся комитеты по стандартам
C был разработан так, чтобы быть гибким для поддержки всех видов таких платформ. Указание фиксированного размера, будь то для целочисленных или с плавающей запятой, не дает этой цели. Поддержка чисел с плавающей запятой в оборудовании сильно различается, как и поддержка целых чисел. Существуют различные форматы, в которых используется десятичное, шестнадцатеричное или, возможно, другое основание. Каждый формат имеет разные размеры экспоненты / мантиссы, разное положение знака / экспоненты / мантиссы и даже формат со знаком. Например, некоторые используют дополнение до двух для мантиссы, в то время как некоторые другие используют дополнение до двух для экспоненты или всего значения с плавающей запятой. Вы можете увидеть множество форматов здесь, но, очевидно, это не все форматы, которые когда-либо существовали. Например, SHARC выше имеет специальный 40-битный формат с плавающей запятой. Некоторые платформы также используют двойную двойную арифметику для long double
. Смотрите также
Это означает, что нельзя стандартизировать единый формат с плавающей запятой для всех платформ, потому что не существует универсального решения. Если вы разрабатываете DSP, очевидно, что вам нужен формат, который лучше всего подходит для ваших целей, чтобы вы могли обрабатывать как можно больше данных. Нет причин использовать IEEE-754 binary64, если 40-битный формат имеет достаточную точность для вашего приложения, лучше помещается в кеш и требует гораздо меньшего размера кристалла. Или, если вы используете небольшую встроенную систему, 80-битные long double
обычно бесполезны, поскольку у вас даже недостаточно ПЗУ для этой 80-битной long double
библиотеки. Вот почему некоторые платформы ограничивают long double
64-битной версией, например double
person
phuclv
schedule
19.11.2020