У вашей функции нет доступа к общей переменной, захватите ее из элемента html #total
...
function deleteRow(row) {
console.log(product.total_cost);
var total = $("#total").val(); //grab current total from html element
total -= Number(product.total_cost);
$("#total").val(total);
$(row).remove();
onRowRemoved();
}
Короткий ответ заключается в том, как работает представление 2-дополнения : старший бит является по сути знаковым битом, поэтому 1
означает -
. Другими словами, вы должны вычесть из суммы
A5*(B4 B3 B2 B1 B0) << 5
и
B5*(A4 A3 A2 A1 A0) << 5
из суммы (обратите внимание, что A5*B5
добавляется снова, потому что оба имеют одинаковый знак -
). И эти два 1
являются результатом замены этих двух вычитаний дополнениями -X
.
Если вам нужно больше подробностей, то вам, вероятно, просто нужно перечитать, как работают 2-х дополнения, а затем всю математику, лежащую в основе алгоритма умножения Боуг-Вули. Это не так сложно.
В знаковых 6-битных двоичных двоичных символах дополнения значения битов:
-32 16 8 4 2 1
Обратите внимание, что старший бит имеет отрицательное значение. Однако, когда сложение, вычитание и умножение выполняются по модулю 64, этот знак минус абсолютно не влияет на то, как работают эти операции, потому что 32 = -32 мод 64.
Ваше умножение не выполняется мод 64, однако, так что знак должен быть принят во внимание.
Один способ думать о вашем умножении состоит в том, что 6-битные числа расширяются до 12 битов, а затем выполняется умножение по модулю 4096. При расширении числа со знаком старший бит реплицируется, поэтому -32 становится -2048 + 1024 + 512 ... +32, которые вместе имеют одинаковое значение -32. Так что расширьте числа со знаком и умножьте. Я сделаю это с 3 битами, умножив мод 64:
Given: Sign-extended:
A2 A1 A0 A2 A2 A2 A2 A1 A0
B2 B1 B0 B2 B2 B2 B2 B1 B0
Multiply:
A0B2 A0B2 A0B2 A0B2 A0B1 A0B0
A1B2 A1B2 A1B2 A1B1 A1B0
A2B2 A2B2 A2B1 A2B0
A2B2 A2B1 A2B0
A2B1 A2B0
A2B0
Поскольку мы реплицировали одни и те же биты в нескольких позициях, вы увидите одинаковые битовые продукты в нескольких позициях.
A0B2 появляется 4 раза с общим значением места 60 или 15 < 2 и т. Д. Давайте запишем множители в:
A0B2*15 A0B1 A0B0
A1B2*7 A1B1 A1B0
A2B2*5 A2B1*7 A2B0*15
Опять же, из-за модульной арифметики, * 15s и * 7s такие же, как * -1, а * 5 совпадает с * 1:
-A0B2 A0B1 A0B0
-A1B2 A1B1 A1B0
A2B2 -A2B1 -A2B0
Эта модель начинает казаться знакомой. Теперь, конечно, -1 не является битовым значением, но ~ A0B2 = 1-A0B2, поэтому мы можем перевести -A0B2 в ~ A0B2 и затем вычесть дополнительный 1, который мы добавили. Если мы сделаем это для всех вычитаемых произведений:
~A0B2 A0B1 A0B0
~A1B2 A1B1 A1B0
A2B2 ~A2B1 ~A2B0
-2 -2
Если мы сложим значения мест этих -2 и расширим их в эквивалентные биты, мы обнаружим источник дополнительных 1 на вашей диаграмме:
~A0B2 A0B1 A0B0
~A1B2 A1B1 A1B0
A2B2 ~A2B1 ~A2B0
1 1