почему число IEEE с плавающей запятой рассчитывает показатель степени с помощью предвзятой формы? - PullRequest
13 голосов
/ 10 апреля 2010

скажем, для типа float в c, в соответствии со спецификацией IEEE с плавающей запятой, для поданной дроби используются 8 бит, и она вычисляется как первая, взятая из этих 8 бит и перевел его в число без знака , а затем минус BIASE, который равен 2 ^ 7 - 1 = 127, и в результате экспонента находится в диапазоне от -127 до 128 включительно. Но почему мы не можем просто рассматривать этот 8-битный шаблон как число со знаком, так как результирующий диапазон равен [-128,127], что почти совпадает с предыдущим.

1 Ответ

16 голосов
/ 10 апреля 2010

Цель смещения состоит в том, что показатель степени сохраняется в форме без знака , что облегчает сравнение. От Википедия :

Расположив поля так, чтобы знак бит в самом значительном бите положение, смещенный показатель в середина, потом мантисса в меньшей мере значащие биты, результирующее значение будет заказан правильно, будь то интерпретируется как с плавающей запятой или целочисленное значение. Это позволяет высокую скорость сравнения чисел с плавающей точкой с использованием оборудования с фиксированной точкой.

Таким образом, в общем случае число с плавающей точкой:

[sign] [unsigned exponent (aka exponent + bias)] [mantissa]

Этот веб-сайт предоставляет отличную информацию о том, почему это хорошо - в частности, сравните реализации функций сравнения с плавающей запятой.

Кроме того, ни один полный ответ о странностях с плавающей запятой не обходится без упоминания « Что должен знать каждый компьютерный специалист об арифметике с плавающей запятой ». Он длинный, плотный и немного тяжелый по математике, но он длинный, плотный математическое золото (или что-то в этом роде).

...