Приведение 32 бит к 16

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Первый раз сказал Мяу!
Сообщения: 38
Зарегистрирован: Пн май 14, 2007 19:49:16
Откуда: Краснодар

Сообщение Rubin »

Добрый день Уважаемые форумчане. Столкнулся с задачкой: перемножаю 2 16 бит числа, соответственно получаю число 32 бит. Это 32 бит число необходимо привести обратно к 16. ror желаемого результата не дает.
Контактная информация:
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2277
Зарегистрирован: Вс апр 20, 2008 23:34:26
Откуда: Москва

Сообщение ArtemKuchin »

Rubin писал(а):Добрый день Уважаемые форумчане. Столкнулся с задачкой: перемножаю 2 16 бит числа, соответственно получаю число 32 бит. Это 32 бит число необходимо привести обратно к 16. ror желаемого результата не дает.
Ну а если просто отрезать нижние 16 бит? Останутся верхние 16 значащих бит. Или взять нижние, смотря что надо.
Ведь понятно. что 0x12345678 не может быть однозначно переведено
в 16 битноую форму.
Поэтому, если нужно точность до 16 бит, то просто берем
0x1234 и имеет ввиду что это изанчальное число деленное на 65536 0xffff
А если мы знаем, что при перемножении результат не может быть больше 0xffff то смело берем нижние 16 бит (0x5678)
А о каком языке речь идет?
Долой идиотизм!
Контактная информация:
Реклама
Первый раз сказал Мяу!
Сообщения: 38
Зарегистрирован: Пн май 14, 2007 19:49:16
Откуда: Краснодар

Сообщение Rubin »

пробовал, лажа получается, и умножать старшие части тоже пробовал, разброс в 10 процентов, и это до моей значащей запятой (целая часть) :(
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18785
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

гм... интересно, а вы как хотели? привести 32 бита к 16 и при этом точность не потерять?! запросы непомерные у вас, батенька! :)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Первый раз сказал Мяу!
Сообщения: 38
Зарегистрирован: Пн май 14, 2007 19:49:16
Откуда: Краснодар

Сообщение Rubin »

вопрос о точности не стоит, значащих будет 5 цифр (111,11).
Контактная информация:
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18785
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

а тогда о чем стоит? из 32-разрядного результата вы берете старшее слово, т.е. результат делите на 65535. и надеетесь получить более-менее приличный результат?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2277
Зарегистрирован: Вс апр 20, 2008 23:34:26
Откуда: Москва

Сообщение ArtemKuchin »

Rubin писал(а):вопрос о точности не стоит, значащих будет 5 цифр (111,11).
5 цифр в десятичной системе это максиум 99999 ЧТО ЗА ПРЕДЕЛАМИ 16 бит! (16 бит без знака это макс 65535). Это 17 бит!
Какое у вас максимальное число в измерениях?

Если точно за пределами 65535,то варианты:

1) Разделить все на 2 (т.е. сдвинуть вправо на 1бит), потеряется точность, но все влезет в 16 бит.
2) Взять нижние 16 бит, а 17-й обрабатывать отдельно в условных переходах, так как он всего один лишний бит, то можно его и обработать в if отдельно
3) сдвинуть все вправо, но запомнить младший бит, обработать все как 16-и битовое число и учесть потом младиший бит хитрым алгоритмом
Последний раз редактировалось ArtemKuchin Вт авг 05, 2008 12:17:11, всего редактировалось 1 раз.
Долой идиотизм!
Контактная информация:
Первый раз сказал Мяу!
Сообщения: 38
Зарегистрирован: Пн май 14, 2007 19:49:16
Откуда: Краснодар

Сообщение Rubin »

до 300
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2277
Зарегистрирован: Вс апр 20, 2008 23:34:26
Откуда: Москва

Сообщение ArtemKuchin »

Rubin писал(а):до 300
Прошу перечитать мое предыдущее сообщени - я его подредактировал.
Эм. видать не тот вопрос задал. Какое максимаьлно число может быть как разультат этого перемножения?
Долой идиотизм!
Контактная информация:
Первый раз сказал Мяу!
Сообщения: 38
Зарегистрирован: Пн май 14, 2007 19:49:16
Откуда: Краснодар

Сообщение Rubin »

результатом перемножения может быть максимальное число - 654080625
Дело в том что нужно результат умножения перевести в BCD, ну а запятую поставить - дело техники. в BCD числа переводятся в 16 формате, поэтому и надо придти к 16 формату чтобы обработать в BCD
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18785
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

фигню какую-то вы тут нам говорите... при чем тут BCD? если надо - переводите свое 32-разрядное в BCD... хотя зачем это может вам понадобиться - ума не приложу...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Первый раз сказал Мяу!
Сообщения: 38
Зарегистрирован: Пн май 14, 2007 19:49:16
Откуда: Краснодар

Сообщение Rubin »

результаты измерений ацп перемножаются, на одном канале меряю напряжение на другом ток, перемножаю, плучаю мощность
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2277
Зарегистрирован: Вс апр 20, 2008 23:34:26
Откуда: Москва

Сообщение ArtemKuchin »

Rubin писал(а):результаты измерений ацп перемножаются, на одном канале меряю напряжение на другом ток, перемножаю, плучаю мощность
Все, вариантов нет, или режем нижние 16 бит и получаем малую точность
или не режем и работаем со всеми 32-я как можем.

Как вариант можно с АЦП снимать старшие 8 бит и их перемножать получая сразу 16 бит.
Долой идиотизм!
Контактная информация:
Модератор
Аватара пользователя
Сообщения: 4673
Зарегистрирован: Вс июн 01, 2008 00:17:35
Откуда: Я всего лишь плод вашего воображения...

Сообщение Пухич »

Как вариант можно с АЦП снимать старшие 8 бит и их перемножать получая сразу 16 бит.
Правда при этом надо помнить, что результат окажется в 4*4 раз меньше.
Знание - сила!
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18785
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

Мой уютный бложик... заходите!
Контактная информация:
Первый раз сказал Мяу!
Сообщения: 38
Зарегистрирован: Пн май 14, 2007 19:49:16
Откуда: Краснодар

Сообщение Rubin »

float не подходит потому что пишу на асме, а забирать результат в 8 бит тоже не вариант, у меня 25 раз складываются результаты измерения (чтобы не делить на 4, при внутреннем ИОН)
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2277
Зарегистрирован: Вс апр 20, 2008 23:34:26
Откуда: Москва

Сообщение ArtemKuchin »

Rubin писал(а):float не подходит потому что пишу на асме, а забирать результат в 8 бит тоже не вариант, у меня 25 раз складываются результаты измерения (чтобы не делить на 4, при внутреннем ИОН)
Ну все.

Нельзя конвертнуть 32 бита в 16 бит и не потерять точность. если число в 16 бит не помещаются. Это невозможно. Это тоже самое. что слона запихнуть в кухонный шкаф.

Поэтому выбор: или отказываться от такой точности или работать с 32-я битами.

Вопрос думаю закрыт.
Последний раз редактировалось ArtemKuchin Вт авг 05, 2008 15:00:32, всего редактировалось 1 раз.
Долой идиотизм!
Контактная информация:
nds
Друг Кота
Аватара пользователя
Сообщения: 4772
Зарегистрирован: Вс май 25, 2008 19:47:47
Откуда: РФ

Сообщение nds »

Переводите данные с ацп в BCD c фиксированной точкой
а потом умножайте BCD числа
умножение столбиком не забыли еще?:)
2B OR NOT 2B = FF
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2277
Зарегистрирован: Вс апр 20, 2008 23:34:26
Откуда: Москва

Сообщение ArtemKuchin »

nds писал(а):Переводите данные с ацп в BCD c фиксированной точкой
а потом умножайте BCD числа
умножение столбиком не забыли еще?:)
пардон, а это тут причем? Зачем BCD? Солько бит займет число
1000000 в BCD? 32 бита! У него же не с перемноженем проблема, а вообще. непонятно счем. По сути, не хочет человек работать с 32-битным числом и все тут.
Долой идиотизм!
Контактная информация:
nds
Друг Кота
Аватара пользователя
Сообщения: 4772
Зарегистрирован: Вс май 25, 2008 19:47:47
Откуда: РФ

Сообщение nds »

Цитирую:
"Дело в том что нужно результат умножения перевести в BCD, ну а запятую поставить - дело техники. в BCD числа переводятся в 16 формате, поэтому и надо придти к 16"
"вопрос о точности не стоит, значащих будет 5 цифр (111,11)."
Навсякий случай уточню если делать вычисления в бцд (поразорядно) разрядность используемых переменных не превысит 8 бит а соответственно и 16
Последний раз редактировалось nds Вт авг 05, 2008 15:16:04, всего редактировалось 1 раз.
2B OR NOT 2B = FF
Контактная информация:
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»