Перейти к содержанию
    

Как преобразовать число в строку на Си для ARM ?

14 hours ago, blackfin said:

Сначала нужно преобразовать int32 в BCD.

Сможете это сделать "за 2 минуты" не используя операцию деления?

Легко! Вам каким способом, таким или таким ? :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, gosha-z said:

Легко! Вам каким способом, таким или таким ? :)

ТС задал вопрос в разделе ARM, 32bit. А раз так, то можно считать, что аппаратного умножителя int64 = int32*int32 в этом ARM'е нет.

Поэтому компилятор преобразует одно умножение int32*int32 в четыре умножения int16*int16 и три сложения.

Кроме того, для вычисления остатка от деления на 10 вам понадобится ещё одно умножение на 10 и ещё одно вычитание.

Итого, для вычисления одного десятичного разряда вам понадобится 5 умножений и 4 сложения.

Не слишком то эффективный код.. :)

Меж тем, существует простой алгоритм вычисления BCD в котором используются только сравнения и вычитания.

И есть еще один простой алгоритм, в котором используются только сравнения, сложения и сдвиги.

Никаких 32-х битных умножений (или делений) для этих алгоритмов не нужно.. ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, blackfin сказал:

ТС задал вопрос в разделе ARM, 32bit. А раз так, то можно считать, что аппаратного умножителя int64 = int32*int32 в этом ARM'е нет.

По вопросу ТС-а можно понять только то, что он скорее всего вообще не знает какой у него процессор. Не знаю как Вы вычислили его процессор?  :russian_ru:

На 99% вангую "народный" STM32F103. Который вполне себе умеет i32*i32=i64.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

19 часов назад, blackfin сказал:

Для ответа на вопрос ТС этого недостаточно. Сначала нужно преобразовать int32 в BCD.

Преобразование в BCD - лишнее промежуточное преобразование.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...