Целочисленные типы без знака имеют два важных свойства, которые отличает их от целочисленных типов со знаком: «сдвинутый» диапазон (без отрицательного поддиапазона, а положительный поддиапазон в два раза шире) и по модулю арифметики. Для целых типов эти свойства достаточно важны, чтобы оправдать существование неподписанных типов.
С плавающими типами ни одно из этих свойств не применяется немедленно. С типами с плавающей точкой основная проблема не в их диапазоне (для многих целей ее можно рассматривать как практически бесконечную), а скорее в точности. А модульная арифметика естественно не применима к нецелочисленным типам. По этой причине было бессмысленно вводить неподписанные типы с плавающей точкой, т. Е. Не имело большого смысла перевернуть роль только одного бита в представлении с плавающей запятой.
Следует также отметить, что приведенные выше рассуждения, вероятно, следует использовать в качестве обоснования для внедрения целочисленных типов без знака (а не для внедрения неподписанных типов с плавающей точкой) в популярное оборудование и соответствующие аппаратные производные стандарты. То, что мы имеем в C и C++, было по существу унаследовано от аппаратных возможностей и этих стандартов.
Конечно, из концептуальной точки зрения, было бы вполне логично иметь беззнаковые типы с плавающей запятой в языке, только ради последовательности. Но, увы, их там нет.
@Greg Hewgill: Да, изменил название приятеля. – Chubsdad
@Greg Hewgill: обновлено в соответствии с вашими комментариями. – Chubsdad
Литералы с плавающей точкой всегда подписываются в терминах * type *. Независимо от того, явно ли вы префикс с +/- не меняет этого и суффикс с U или LU, как если бы целочисленный литерал для принуждения типа был ошибкой. – Clifford