IEEE 754 с плавающей точкой добавить / округление - PullRequest
0 голосов
/ 02 октября 2011

Я не понимаю, как я могу добавить в IEEE 754 с плавающей точкой (в основном, "перестройку" показателя степени)

Также для округления, как вступают в игру Guard, Round & Sticky? Как сделать округление в целом (база 2 с плавающей точкой)

например. Предположим, что qn: Add IEEE 754 Float представлен в виде hex 0x383FFBAD. и 0x3FD0ECCD, затем дайте ответы в раунде на 0, \ $ \ pm \ infty \ $, Ближайший

Итак, у меня есть

0x383FFBAD        0 | 0111 0000 | 0111 1111 1111 0111 0101 1010
0x3FD0ECCD        0 | 0111 1111 | 1010 0001 1101 1001 1001 1010

Тогда как мне продолжать? Не стесняйтесь использовать другие примеры, если хотите

1 Ответ

2 голосов
/ 02 октября 2011

Если я понял ваше "выравнивание" показателя степени правильно ...

Здесь объясняет, как формат соотносится с фактическим значением.

1.b (22) b (21) ... b (0) * 2 e-127 можно интерпретировать как двоичное целое число, смещенное влево на позиции бита e-127. Конечно, величина сдвига может быть отрицательной, поэтому мы получаем дроби (значения от 0 до 1).

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

Причина очень проста. Когда вы добавляете, например, 1 тысячу и 1, вы хотите добавить десятки с десятками, сотни с сотнями и т. Д. Итак, у вас есть 1.000 * 10 3 + 1.000 * 10 0 = 1.000 * 10 3 + 0.001 * 10 3 (<- денормализовано) = 1.001 * 10 <sup>3 . Это, конечно, может привести к усечению / округлению, если формат не может точно представить результат (например, если он может иметь только 2 значащие цифры, вы получите те же 1,0 * 10 3 для сумма).

Таким образом, как и в приведенном выше примере с 1000 и 1, вам может потребоваться сместить вправо одно из добавлений, прежде чем добавлять их мантиссы. Вы должны помнить, что в формате присутствует импактный бит 1., который не сохраняется в плавающей запятой, который вы должны учитывать при перемещении и добавлении. После добавления мантисс вы, скорее всего, столкнетесь с переполнением мантиссы и вам придется снова денормализовать, чтобы избавиться от переполнения.

Это основы. Есть и особые случаи, которые следует учитывать.

...