Приведение 32 бит к 16
Добрый день Уважаемые форумчане. Столкнулся с задачкой: перемножаю 2 16 бит числа, соответственно получаю число 32 бит. Это 32 бит число необходимо привести обратно к 16. ror желаемого результата не дает.
- Реклама
Ну а если просто отрезать нижние 16 бит? Останутся верхние 16 значащих бит. Или взять нижние, смотря что надо.Rubin писал(а):Добрый день Уважаемые форумчане. Столкнулся с задачкой: перемножаю 2 16 бит числа, соответственно получаю число 32 бит. Это 32 бит число необходимо привести обратно к 16. ror желаемого результата не дает.
Ведь понятно. что 0x12345678 не может быть однозначно переведено
в 16 битноую форму.
Поэтому, если нужно точность до 16 бит, то просто берем
0x1234 и имеет ввиду что это изанчальное число деленное на 65536 0xffff
А если мы знаем, что при перемножении результат не может быть больше 0xffff то смело берем нижние 16 бит (0x5678)
А о каком языке речь идет?
Долой идиотизм!
пробовал, лажа получается, и умножать старшие части тоже пробовал, разброс в 10 процентов, и это до моей значащей запятой (целая часть) 
гм... интересно, а вы как хотели? привести 32 бита к 16 и при этом точность не потерять?! запросы непомерные у вас, батенька! 
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
вопрос о точности не стоит, значащих будет 5 цифр (111,11).
- Реклама
а тогда о чем стоит? из 32-разрядного результата вы берете старшее слово, т.е. результат делите на 65535. и надеетесь получить более-менее приличный результат?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
5 цифр в десятичной системе это максиум 99999 ЧТО ЗА ПРЕДЕЛАМИ 16 бит! (16 бит без знака это макс 65535). Это 17 бит!Rubin писал(а):вопрос о точности не стоит, значащих будет 5 цифр (111,11).
Какое у вас максимальное число в измерениях?
Если точно за пределами 65535,то варианты:
1) Разделить все на 2 (т.е. сдвинуть вправо на 1бит), потеряется точность, но все влезет в 16 бит.
2) Взять нижние 16 бит, а 17-й обрабатывать отдельно в условных переходах, так как он всего один лишний бит, то можно его и обработать в if отдельно
3) сдвинуть все вправо, но запомнить младший бит, обработать все как 16-и битовое число и учесть потом младиший бит хитрым алгоритмом
Последний раз редактировалось ArtemKuchin Вт авг 05, 2008 12:17:11, всего редактировалось 1 раз.
Долой идиотизм!
Прошу перечитать мое предыдущее сообщени - я его подредактировал.Rubin писал(а):до 300
Эм. видать не тот вопрос задал. Какое максимаьлно число может быть как разультат этого перемножения?
Долой идиотизм!
результатом перемножения может быть максимальное число - 654080625
Дело в том что нужно результат умножения перевести в BCD, ну а запятую поставить - дело техники. в BCD числа переводятся в 16 формате, поэтому и надо придти к 16 формату чтобы обработать в BCD
Дело в том что нужно результат умножения перевести в BCD, ну а запятую поставить - дело техники. в BCD числа переводятся в 16 формате, поэтому и надо придти к 16 формату чтобы обработать в BCD
фигню какую-то вы тут нам говорите... при чем тут BCD? если надо - переводите свое 32-разрядное в BCD... хотя зачем это может вам понадобиться - ума не приложу...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
результаты измерений ацп перемножаются, на одном канале меряю напряжение на другом ток, перемножаю, плучаю мощность
Все, вариантов нет, или режем нижние 16 бит и получаем малую точностьRubin писал(а):результаты измерений ацп перемножаются, на одном канале меряю напряжение на другом ток, перемножаю, плучаю мощность
или не режем и работаем со всеми 32-я как можем.
Как вариант можно с АЦП снимать старшие 8 бит и их перемножать получая сразу 16 бит.
Долой идиотизм!
- Сообщения: 4673
- Зарегистрирован: Вс июн 01, 2008 00:17:35
- Откуда: Я всего лишь плод вашего воображения...
используйте float...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
float не подходит потому что пишу на асме, а забирать результат в 8 бит тоже не вариант, у меня 25 раз складываются результаты измерения (чтобы не делить на 4, при внутреннем ИОН)
Ну все.Rubin писал(а):float не подходит потому что пишу на асме, а забирать результат в 8 бит тоже не вариант, у меня 25 раз складываются результаты измерения (чтобы не делить на 4, при внутреннем ИОН)
Нельзя конвертнуть 32 бита в 16 бит и не потерять точность. если число в 16 бит не помещаются. Это невозможно. Это тоже самое. что слона запихнуть в кухонный шкаф.
Поэтому выбор: или отказываться от такой точности или работать с 32-я битами.
Вопрос думаю закрыт.
Последний раз редактировалось ArtemKuchin Вт авг 05, 2008 15:00:32, всего редактировалось 1 раз.
Долой идиотизм!
Переводите данные с ацп в BCD c фиксированной точкой
а потом умножайте BCD числа
умножение столбиком не забыли еще?:)
а потом умножайте BCD числа
умножение столбиком не забыли еще?:)
2B OR NOT 2B = FF
пардон, а это тут причем? Зачем BCD? Солько бит займет числоnds писал(а):Переводите данные с ацп в BCD c фиксированной точкой
а потом умножайте BCD числа
умножение столбиком не забыли еще?:)
1000000 в BCD? 32 бита! У него же не с перемноженем проблема, а вообще. непонятно счем. По сути, не хочет человек работать с 32-битным числом и все тут.
Долой идиотизм!
Цитирую:
"Дело в том что нужно результат умножения перевести в BCD, ну а запятую поставить - дело техники. в BCD числа переводятся в 16 формате, поэтому и надо придти к 16"
"вопрос о точности не стоит, значащих будет 5 цифр (111,11)."
Навсякий случай уточню если делать вычисления в бцд (поразорядно) разрядность используемых переменных не превысит 8 бит а соответственно и 16
"Дело в том что нужно результат умножения перевести в BCD, ну а запятую поставить - дело техники. в BCD числа переводятся в 16 формате, поэтому и надо придти к 16"
"вопрос о точности не стоит, значащих будет 5 цифр (111,11)."
Навсякий случай уточню если делать вычисления в бцд (поразорядно) разрядность используемых переменных не превысит 8 бит а соответственно и 16
Последний раз редактировалось nds Вт авг 05, 2008 15:16:04, всего редактировалось 1 раз.
2B OR NOT 2B = FF


