У меня есть алгоритм выполнения деления мантисс для деления с плавающей точкой, но я не уверен как правильно назвать алгоритм размещено ниже (например, восстановление, невосстановление, СТО).
Для того чтобы справиться с тем фактом, что мои входные данные представлены в формате с плавающей запятой, я вычел показатели степени операнда, чтобы найти новую экспоненту, XOR обработал знаковые биты, чтобы получить новый знаковый бит, и выполнил округление до ближайшего значения для схемы округления.
НО, я использовал этот алгоритм из Википедии для разделения мантисс:
(https://en.wikipedia.org/wiki/Division_algorithm):
Вот мой код:
{Code for handling exponent, sign bit, and grabbing mantissa,
invalid input detection and zero input detection}
{op1 is the numerator, op2 is the divisor)
{assuming 32-bit floating point)
long long mant1, mant2;
mant1 = (1 << 23) & (op1 & 0x7FFFFF); // Make mantissas with hidden bit masked in
mant2 = (1 << 23) & (op2 & 0x7FFFFF);long long Q = 0, N, D; // Declare quotient, numerator, and divisor
N = mant1 << 26;
D = mant2 << 26;
for (int i = 0; i < 28; i++) {
Q = Q << 1; // Multiply quotient by 2
if (N-D < 1) {
N = N-D; // Set new numerator equal to difference
Q = Q | 1; // Set LSB of quotient to 1
}
D = D >> 1; // Shift divider right by 1;
}
Алгоритм похож на тот, который называется Целочисленное деление (без знака) с остатком согласно википедии, но во всей другой литературе по алгоритмам деления с плавающей запятой я не смог найти ссылку на такой алгоритм, наиболее близким к этому описанию является истинное разделение. По этой причине я хотел узнать у сообщества, как называется правильное имя для этого алгоритма деления.
Дополнительные примечания: я знаю, что в C и C ++ есть инструкция с плавающей запятой, я пишу и тестирую этот алгоритм, так как я реализую его для аппаратного проектирования. Тем не менее, я хочу использовать этот алгоритм, так как он, как представляется, имеет небольшие накладные расходы, хотя и с большой задержкой (что хорошо для моей встроенной платформы).
Спасибо
Задача ещё не решена.
Других решений пока нет …