Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Ну если не поддерживаются 64 р. инты, то можно столбиком:-)

Отправлено -=ВН=- 28 июня 2007 г. 14:21
В ответ на: Нужно умножить два 32 битных числа и получить две половинки 64 битного результата. Поделитесь идеей или примером. Пока есть мысля через приведение к float или double сделать. Но хотелось бы в целых все решить. отправлено <font color=gray>Papagato</font> 28 июня 2007 г. 12:46

На примере беззнаковых
result=(low1+2^16*high1)(low2+2^16*high2)=
low1*low2+2^16*(low1*high2+low2*high1)+2^32*high1*high2.

Сомножители: unsigned long operand1,operand2;

unsigned long low_result; //low 32 bits of result
unsigned long high_result; //high 32 bits of result;
unsigned long tmp;
unsigned long lop1,lop2;
lop1=operand1&0xffffL;
lop2=operand2&0xffffL;
operand1>>=16;
operand2>>=16;

low_result=lop1*lop2;
tmp=low_result>>16;
high_result=operand1*operand2;

operand1*=lop2;
operand2*=lop1;
lop1=operand1&0xffffL;
operand1>>=16;
lop2=operand2&0xffffL;
operand2>>=16;

tmp+=lop1+lop2;
lop1=tmp<<16;
low_result+=lop1;

tmp>>=16;
high_result+=(tmp+operand1+operand2);



Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 90:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru