Почему нет беззнаковых типов с плавающей точкой? [Дубликат]

15
задан Community 23 May 2017 в 12:03
поделиться

2 ответа

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

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

Следует также отметить, что приведенные выше рассуждения, вероятно, следует использовать в качестве обоснования введения беззнаковых целочисленных типов (а не введения беззнаковых типов с плавающей запятой) в популярном оборудовании и соответствующих аппаратно-производных стандартах.То, что мы имеем в C и C++, по сути унаследовано от аппаратных возможностей и этих стандартов.

Конечно, с концептуальной точки зрения было бы вполне логично иметь в языке беззнаковые типы с плавающей запятой, просто ради согласованности. Но, увы, их нет.

28
ответ дан 1 December 2019 в 01:38
поделиться

Все значения с плавающей запятой подписаны. C++ следует стандарту IEEE 754, который является наиболее распространенной аппаратной реализацией, и в соответствии с ним числа с плавающей запятой всегда подписаны.

Поскольку числа с плавающей запятой уже занимают не менее 32 бит, выигрыш от программной реализации, которая восстановит этот 1 бит, незначителен по сравнению с полезностью такой реализации.

6
ответ дан 1 December 2019 в 01:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: