Почему авторы стандарта C / C99 не указывают ..стандарт для размеров типов с плавающей запятой? - PullRequest
3 голосов
/ 10 августа 2010

Я заметил в Windows и Linux x86, float 4 байта, double 8, но long double 12 и 16 на x86 и x86_64 соответственно.Предполагается, что C99 преодолевает такие барьеры с определенными целочисленными размерами.

Первоначальное технологическое ограничение, по-видимому, связано с тем, что процессор x86 не может обрабатывать более 80-битных операций с плавающей запятой (плюс 2 байта для округления).) но почему несоответствие в стандарте по сравнению с типами int?Почему они не идут хотя бы на 80-битную стандартизацию?

Ответы [ 3 ]

5 голосов
/ 10 августа 2010

Язык C не определяет реализацию различных типов, поэтому он может быть эффективно реализован на максимально возможном разнообразии аппаратного обеспечения.

Это распространяется и на целочисленные типы - стандартные целочисленные типы C имеют минимальные диапазоны (например, signed char - от -127 до 127, short и int - от -32,767 до 32,767 long составляет от -2 147 483 647 до 2 147 483 647 и long long составляет от -9 223 372 036 854 775 807 (9 223 372 036 854 775 807). Это практически все, что нужно знать программисту.

C99 предоставляет целочисленные типы «фиксированной ширины», такие как int32_t - но они необязательны - если реализация не может обеспечить такой тип эффективно, она не должна предоставлять его .

Для типов с плавающей запятой существуют эквивалентные ограничения (например, double должен иметь точность не менее 10 десятичных цифр).

3 голосов
/ 10 августа 2010

Они пытались (в основном) приспособиться к уже существующим реализациям C, некоторые из которых даже не используют форматы IEEE с плавающей запятой.

1 голос
/ 10 августа 2010

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

float s, с другой стороны, предназначены для очень специфического использования (арифметика с плавающей запятой).Вы вряд ли сможете точно определить, сколько бит вам нужно для вашего float.На самом деле, в большинстве случаев, чем больше битов, тем лучше.

...