gosha-z 2 7 июля, 2019 Опубликовано 7 июля, 2019 · Жалоба 14 hours ago, blackfin said: Сначала нужно преобразовать int32 в BCD. Сможете это сделать "за 2 минуты" не используя операцию деления? Легко! Вам каким способом, таким или таким ? :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 25 7 июля, 2019 Опубликовано 7 июля, 2019 · Жалоба 1 hour ago, gosha-z said: Легко! Вам каким способом, таким или таким ? :) ТС задал вопрос в разделе ARM, 32bit. А раз так, то можно считать, что аппаратного умножителя int64 = int32*int32 в этом ARM'е нет. Поэтому компилятор преобразует одно умножение int32*int32 в четыре умножения int16*int16 и три сложения. Кроме того, для вычисления остатка от деления на 10 вам понадобится ещё одно умножение на 10 и ещё одно вычитание. Итого, для вычисления одного десятичного разряда вам понадобится 5 умножений и 4 сложения. Не слишком то эффективный код.. :) Меж тем, существует простой алгоритм вычисления BCD в котором используются только сравнения и вычитания. И есть еще один простой алгоритм, в котором используются только сравнения, сложения и сдвиги. Никаких 32-х битных умножений (или делений) для этих алгоритмов не нужно.. ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 236 7 июля, 2019 Опубликовано 7 июля, 2019 · Жалоба 1 час назад, blackfin сказал: ТС задал вопрос в разделе ARM, 32bit. А раз так, то можно считать, что аппаратного умножителя int64 = int32*int32 в этом ARM'е нет. По вопросу ТС-а можно понять только то, что он скорее всего вообще не знает какой у него процессор. Не знаю как Вы вычислили его процессор? На 99% вангую "народный" STM32F103. Который вполне себе умеет i32*i32=i64. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aiwa 0 7 июля, 2019 Опубликовано 7 июля, 2019 · Жалоба 19 часов назад, blackfin сказал: Для ответа на вопрос ТС этого недостаточно. Сначала нужно преобразовать int32 в BCD. Преобразование в BCD - лишнее промежуточное преобразование. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 7 июля, 2019 Опубликовано 7 июля, 2019 · Жалоба On 7/6/2019 at 7:39 PM, blackfin said: Для ответа на вопрос ТС этого недостаточно. Сначала нужно преобразовать int32 в BCD. Сможете это сделать "за 2 минуты" не используя операцию деления? ;) Пользовал Double dabble - это для малых разрядностей (? до 32). Давно было, но множений-делений вроде нет. Quote It is also known as the shift-and-add-3 algorithm Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться