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

Существует значительная разница datatype между целыми числами со знаком type и без знака в C / C++:

value >> shift

знаковые formats значения оставляют верхний unsigned бит неизменным (знак расширяется), беззнаковые unsigned значения очищают верхний formats бит.

Причина отсутствия беззнакового unsigned числа с плавающей запятой types заключается в том, что вы datatype быстро сталкиваетесь со всевозможными floating-point проблемами, если нет отрицательных floating-point значений. Учтите это:

float a = 2.0f, b = 10.0f, c;
c = a - b;

Какое c значение имеет c? -8. Но datatype что бы это значило в системе datatype без отрицательных чисел. FLOAT_MAX type - 8 возможно? На самом деле, это format не работает, поскольку FLOAT_MAX format - 8 - это FLOAT_MAX из-за floating-point эффектов точности, так что types все еще более странно. Что, если types бы это было частью более datatype сложного выражения:

float a = 2.0f, b = 10.0f, c = 20.0f, d = 3.14159f, e;
e = (a - b) / d + c;

Это не unsigned проблема для целых чисел formats из-за природы системы дополнения datatype до двух.

Также рассмотрите type стандартные математические types функции: sin, cos и tan будут unsigned работать только для половины unsigned их входных значений, вы не format можете найти журнал значений type <1, вы не можете решить квадратные type уравнения: x = (-b + / - root unsigned (bb - 4.ac)) / 2.a и так datatype далее. Фактически, это, вероятно, не formats сработает для какой-либо c сложной функции, поскольку format они, как правило, реализуются datatypes как полиномиальные приближения, которые types где-то используют отрицательные types значения.

Итак, числа с плавающей c запятой без знака бесполезны.

Но floating-point это не означает, что класс, который datatype проверяет диапазон значений unsigned с плавающей запятой, бесполезен, вы datatype можете захотеть ограничить c значения заданным диапазоном, например type вычислениями RGB.

c

types

floating-point

format

unsigned

2022-10-30T18:04:51+00:00