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

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

Нужно умножить два 32 битных числа и получить две половинки 64 битного результата. Поделитесь идеей или примером. Пока есть мысля через приведение к float или double сделать. Но хотелось бы в целых все решить.

Отправлено Papagato 28 июня 2007 г. 12:46



Нужно умножить два 32 битных числа и получить две половинки 64 битного результата. Поделитесь идеей или примером. Пока есть мысля через приведение к float или double сделать. Но хотелось бы в целых все решить.

======= вот решение с "плавающей точкой"

32 бит умножить на 32 бит (все единицы) будет FF FF FF FE 00 00 00 01

FFFFFFFE00000001 в десятичном виде - 18446744065119617025


18 446 744 065 119 617 025


привести ваше 32 битное число к типу float или double

float 32 ±1.175e-38 to ±3.402e38
double 32 ±1.175e-38 to ±3.402e38

вот так

(float)число

Сделать умножение и результат привести к двум 32 битным числам нужного типа

long int 32 -2147483648 to 2147483647
unsigned long int 32 0 to 4294967295
signed long int 32 -2147483648 to 2147483647


Старшее 32 битное число - будет результат поделить на 2 в степени 32

А младшее 32 битное будет - результат минус (старшее число умноженое на 2 в степени 32).


==============

Пример

если 18446744065119617025 поделить на 2 в 32 степени (4294967296) получим 4294967294,0000000002328306436539


FFFFFFFE и остаток 0,0000000002328306436539

это старшее 32 битное число в нужном нам 64 битном.


теперь вычтем из 18446744065119617025 число 4294967294 умноженое на 2 в степени 32 (4294967296) получаем число 1
это младшее 32 битное число.


так мы получили 64 битный результат: FF FF FF FE 00 00 00 01

[Posted by 83.167.116.97 via http://webwarper.net/ru This is added while posting a message to avoid misuse.
Try: http://webwarper.net/webwarper.exe Example of viewing: http://webwarper.net/ww/~av/http://webwarper.net/ ]

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

Ответы


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

Сообщение:

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

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

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

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