2016-03-03 2 views
0

Я пытаюсь понять двоичное добавление в формате IEEE с одной точностью.Binary Addition Формат IEEE

Например, рассмотрим случай

2^-20 + 2^-17

Как добавить их? Должен ли я сначала преобразовать их в десятичные числа в степень 10 и сделать это? но опять же я получаю 9 цифр, и поскольку компьютер может представлять 7 цифр, как мне избавиться от двух других? И тогда как будет добавление? Любые материалы для чтения также будут действительно полезными.

ответ

0

Найдите хороший источник, объясняющий формат данных.

Извлеките один бит, 8-разрядный показатель и 23-битную сохраненную мантиссу из обоих чисел.

Если какой-либо показатель равен 0xff, то это число NaN (если сохраненная мантисса отлична от нуля) или бесконечность (если сохраненная мантисса равна 0). Посмотрите, какие результаты вы должны вернуть во всех случаях, связанных с Infinity и NaN, и верните этот результат. Готово.

Если показатель не равен 0 (ноль или денормализованное число), добавьте неявный ведущий 1 бит в положение 23 мантиссы, предоставив вам правильную 24-битную мантиссу.

Сравните экспоненты. Сдвиньте число с меньшей мантиссой вправо на правильное количество бит, но следите за всеми битами, которые были сдвинуты.

Добавить или вычесть мантиссы в зависимости от знака, включая выбитые биты.

Если мантисса и все биты, которые были сдвинуты, равны нулю, тогда результат равен +0 или -0. Проверьте правила IEEE, чтобы найти, какой из них. Только (-0) + (-0) дает -0, все остальное +0. Готово.

Если бит 24 мантиссы установлен, то сдвиг результата вправо и увеличить показатель на 1.

До тех пор пока бит 23 мантиссы очищается и показатель не равен нулю сдвига, чтобы результат слева и уменьшите показатель на 1.

Если установлен старший бит бит, который вы переместили из мантиссы, и если либо больше бит сдвинут, либо младший бит мантиссы равен 1, тогда увеличьте мантисса на 1, и если бит 24 установлен, сдвиньте его вправо на 1 бит и увеличьте показатель.

Если показатель степени 0xff, то результат равен + Infinity или -Infinity. Готово.

В противном случае очистить бит 23 мантиссы и добавить знак, экспоненту и мантису в результат.

+0

Хм спасибо за ваш ответ? Но как я могу найти относительную ошибку? – user2792941

+0

@ user2792941: Точно так же вы всегда вычисляете относительную ошибку: 'abs ((approximate_value - exact_value)/exact_value)'. Если вы не знаете, как вычислить относительную ошибку, я бы предложил «math.stackexchange.com» в качестве более подходящего места. –

+1

В этом ответе отсутствуют все сведения о том, как округлить до 24 бит с соответствующим режимом округления (например, round-ties-to-even или что-то еще), а также отсутствуют сведения о субнормалах. На самом деле, я не думаю, что есть хороший способ ответить на этот вопрос в формате SO, если мы не дадим ни одного канонического полного ответа со всеми деталями где-то. И это кажется излишним, когда этот материал задокументирован во многих других местах. –