Рассмотрим представление с фиксированной точкой, которое можно рассматривать как вырожденный случай с плавающей точкой. Вполне возможно использовать дополнение 2 для отрицательных чисел. Но почему знаковый бит необходим для чисел с плавающей запятой, разве биты мантиссы не должны использовать дополнения 2?
Кроме того, почему биты экспоненты используют смещение вместо представления величины со знаком (аналогично битам мантиссы) или представления дополнения 2?
Обновление: Извините, если я не дал понять, Я искал причину того, как формируется представление с плавающей точкой. Если между альтернативами нет сильного компромисса в реализации, то может ли кто-нибудь объяснить исторические аспекты представления с плавающей запятой?
Из Википедии:
Двойка-дополнение представляет собой представление отрицательных чисел, что очень удобно. Вот и вся причина использовать его вообще.
Пара мантисса-экспонента является представлением числа с плавающей запятой. Большую часть времени при использовании чисел с плавающей запятой вы не делаете арифметику исключительно на мантиссе или исключительно на экспоненте.
источник
Ложное предположение. Это не обязательно. Я почти уверен, что встречал форматы с плавающей запятой, которые использовали дополнение 2 для мантиссы, но мне пришлось бы искать имена.
Я далеко не специалист по численному анализу, но я понимаю, что для них важно иметь нулевой знак. Вероятно, легче манипулировать, чем дополнять. Это было, вероятно, критерием при выборе IEEE-754.
Опять же это что-то не нужно, и некоторые поступили иначе.
Это представление, для которого проще сделать аппаратную реализацию для набора операций, выполняемых над показателями (и здесь наличие представления для -0 не требуется).
Одним из следствий этого выбора является то, что вы можете использовать целочисленное сравнение со знаком для сравнения числа FP, если вы не заботитесь о NaN, что, возможно, было критерием для некоторых (тот факт, что NaN требует специальной обработки, заставляет меня сомневаться, что это не так. для IEEE-754).
источник
IEEE 754 использует знак / величину, а не два или одно дополнение.
Недостатком дополнения к двум является то, что положительный и отрицательный диапазон не идентичны. Если все битовые комбинации верны, то у вас есть числа x, где вы не можете легко вычислить -x. Плохо. Альтернатива состоит в том, что существуют недопустимые битовые комбинации, что тоже плохо. В IEEE 754 нет недопустимых битовых комбинаций для 64- или 32-битных чисел с плавающей запятой, поэтому вам не нужно об этом беспокоиться.
Одно дополнение сделало бы умножение / деление более сложным (со звездной величиной вы просто хорируете знаки и рассматриваете мантиссу как число без знака). Для сложения и вычитания я действительно не хочу думать о сложении и вычитании в дополнение, это заставляет мою голову болеть.
источник
Подписанные нули дают повышенную выразительность, которая может быть полезна при численных вычислениях. На странице википедии « Подписанный ноль » написано:
WH Kahan, один из главных разработчиков IEEE 754 с плавающей точкой, является сторонником нулевого знака по этим причинам. Его мнение, вероятно, имело большой вес.
источник
Я думаю, что важно понимать, что вычисления с плавающей точкой дают приблизительные значения, а не точные значения. То есть, если вычисление с плавающей точкой дает закодированное значение X, то это представляет теоретически идеальное значение, которое почти наверняка НЕ X, но находится в диапазоне [X .. X + e) {где 'e' является ' machine epsilon ', то есть между X и X + e нет числа с плавающей точкой. Более конкретно, ноль с плавающей точкой представляет идеальное число, которое, вероятно, не является точно нулем, но слишком мало, чтобы представлять его с ненулевым значением, закодированным с плавающей точкой.
Учитывая, что использование знака и величины является способом, позволяющим кодированию «запоминать», на какой стороне нуля находится идеальное значение, положительное или отрицательное. Это важно в некоторых сложных (в смысле «a + bi») вычислениях - сложные-> сложные функции часто являются «многозначными», поэтому для правильного вычисления важно обращать внимание на места «срезов ветвей». Подписанные нули затем в некотором смысле обозначают места этих срезов ветвей - расчет, выполненный на положительной стороне, будет отличаться от расчета на отрицательной стороне.
источник
Большинство форматов с плавающей запятой используют тот факт, что в двоичной системе любое ненулевое значение с ненулевым показателем будет иметь «1» в качестве наиболее значимого бита мантиссы. Таким образом, в системе с 23-битным полем для мантиссы мантиссы положительных чисел варьируются не от 0 до 8 388 607, а от 8 388 608 до 16 777 215. Мантиссы чисел, которые могут быть или не быть положительными, находятся в диапазоне от -16 777 215 до -8 388 608 и от + 8 388 608 до + 16 777 215. В то время как два дополняют два - лучший числовой формат, когда необходимо, чтобы расчеты «плавно» пересекали ноль, разрывные диапазоны значений мантиссы означают, что вычисления не смогут работать плавно по нулю, независимо от того, используют ли они дополняющие два или что-то еще. ,
источник