Если я понял ваше "выравнивание" показателя степени правильно ...
Здесь объясняет, как формат соотносится с фактическим значением.
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.
, который не сохраняется в плавающей запятой, который вы должны учитывать при перемещении и добавлении. После добавления мантисс вы, скорее всего, столкнетесь с переполнением мантиссы и вам придется снова денормализовать, чтобы избавиться от переполнения.
Это основы. Есть и особые случаи, которые следует учитывать.