почему мы не можем использовать какие-либо модификаторы в типе данных с плавающей точкой в ​​c - PullRequest
0 голосов
/ 29 марта 2020

почему мы не можем использовать какие-либо модификаторы в типе данных с плавающей запятой?

#include <stdio.h> 
int main(void) 
{ 
    signed float a; 
    short float b; 
    return (0); 
} 

Если попытаться использовать его, компилятор выдает ошибку времени компиляции.

error: both ‘signed’ and ‘float’ in declaration specifiers
signed float a; 

error: both ‘short’ and ‘float’ in declaration specifiers
short float b;

Почему компилятор показывает эту ошибку?

Ответы [ 2 ]

3 голосов
/ 29 марта 2020

Поскольку язык не позволяет этого.

В C есть ровно три типа с плавающей точкой: float, double и long double. Не поддерживается беззнаковые типы с плавающей точкой или типы, отличные от этих трех. (Реализации могут предоставлять такие типы, как расширения.)

signed, unsigned и short не являются квалификаторами, которые могут применяться произвольно. Они существуют только как часть синтаксиса имен предопределенных целочисленных типов. Спецификаторы типа определены в N1570 разделе 6.7.2.

Очевидно, что некоторые компиляторы поддерживают short float как 16-битный тип с плавающей точкой, но он нестандартный.

0 голосов
/ 29 марта 2020

Теоретически это звучит нормально, но на практике эти вещи на самом деле не работают.

Способ размещения чисел в памяти, у них уже есть специальный бит для знака, так что float по сути уже a signed float.

У короткого поплавка недостаточно места для хранения значимой информации. Если бы мы предполагали, что short float имеет 16 бит памяти, то после знакового бита у нас едва хватило бы битов для одной или двух цифр точности и крайне ограниченного показателя степени.

Если память критична, то вместо этого вам следует рассмотреть возможность использования числа с фиксированной точкой вместо float номера точки входа. https://en.wikipedia.org/wiki/Fixed-point_arithmetic

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...