Я не могу исправить пост-исправления для невосстанавливающего целочисленного деления. По какой-то причине я продолжаю получать случаи, когда исправляю, когда исправления не требуются или не корректируются при необходимостиНевосстанавливаемое целочисленное разделение с пометкой
heres псевдокод алгоритма. Dividend
- 16 бит и другие 8 бит. К Dividend_Sign
, Remainder_Sign
Я имею в виду, что их MSB равен 1, поэтому они отрицательны по дополнению 2.
LoopCounter = 8;
do {
Shift Dividend Left with 0 in LSB;
if (Dividend_Sign XOR Divisor_Sign) {
Shift 0 into Quotient;
DividendHighByte = DividendHighByte + Divisor;
} else {
shift 1 into Quotient;
DividendHighByte = DividendHighByte - Divisor; // subtraction by 2's complement
}
} while (loopCounter != 0);
Remainder = DividendHighByte;
// here i do the Quotient conversion
invert MSB; // shifted out anyway. Probably should be used for overflow check, not important atm.
shift 1 into Quotient;
теперь им в точке, где я в основном имеют правильный ответ, он просто должен быть пост-исправлен в той или иной форме ... или нет после скорректированной на всех. Я не уверен, что все случаи исправления. Прямо сейчас у меня есть что-то, что Isnt рабочую половину времени, но здесь это все равно:
if (Dividend_Sign XOR Remainder_sign) { // diff signs so correct
if (Remainder_Sign XOR Divisor_Sign) { // diff signs just add
Remainder = Remainder + Divisor;
Quotient = Quotient - 1;
} else {
Remainder = Remainder - Divisor;
Quotient = Quotient + 1;
}
}
http://en.wikipedia.org/wiki/Division_%28digital%29
http://www.acsel-lab.com/arithmetic/papers/ARITH17/ARITH17_Takagi.pdf
Не могли бы вы уточнить, или по крайней мере перечислить, случаи, которые не работают? –
atm found -10: 2 и -10: -2 - правильная предварительная коррекция, и исправление испортит ее. -16: 4 нужно исправить, но не делает. Я думаю, что это имеет какое-то отношение к ним, имеющим 0 остатков. – ollo
Пожалуйста, объясните требования, которые вам понадобятся для остальной части после завершения коррекции (игнорируя на данный момент КАК эта коррекция). –