[Ответить в тред] Ответить в тред

03/04/16 - Набор в модераторы 03.04 по 8.04
26/03/16 - Конкурс: Помоги гомункулу обрести семью!
15/10/15 - Набор в модераторы 15.10 по 17.10



[Назад][Обновить тред][Вниз][Каталог] [ Автообновление ] 12 | 3 | 5
Назад Вниз Каталог Обновить

Битовые операции Аноним 12/04/16 Втр 12:32:07  714502  
14604535276970.png (80Кб, 1531x648)
14604535276981.png (82Кб, 1546x648)
Посоны, нужна ваша помощь.

Есть две функции для записи и чтения значений в \ из регистров. Но какая-то из них работает некорректно.

Что я имею ввиду: из регистра А считывается значение типа float, допустим, 812.159973. Это значение (или любое другое float) записывается в регистры B и С в качестве верхних и нижних порогов.
Но функция чтения этих регистров возвращает значение типа float равное 823.000000, хотя по идее там должно быть 820.000000.
Т.е. надо сформировать корректный байт, состоящий из мантиссы и экспоненты (см. пикрелейтед) для этих регистров.

http://pastebin.com/k5WxfPrp

И ещё, как допилить функцию записи, чтобы записывалось ближайшее болшее значение, например, 813.000000 вместо 812.159973?

Спасибо, если у кого найдётся свободное время для решения моей проблемки.
Аноним 12/04/16 Втр 13:26:26  714534
Бамп.
Аноним 12/04/16 Втр 15:39:08  714606
14604647486330.jpg (199Кб, 1231x1721)
Бамп.
Аноним 12/04/16 Втр 19:21:03  714766
14604780636260.jpg (135Кб, 1280x878)
Ну же, пантсуаны, байтоёбы среди вас перевелись?

Если что не понятно расписал - спрашивайте, уточню.
Аноним 12/04/16 Втр 21:02:49  714878
Это си? Особо не вникал но float маловат для такого длинного числа. double бы взял или long double.
Аноним 12/04/16 Втр 21:52:21  714933
>>714502 (OP)
Вообще непонятно что ты хочешь и что делаешь.
Аноним 12/04/16 Втр 22:22:53  714987
>>714502 (OP)
А ты в курсе, как вообще тип float представлен в памяти?
Аноним 13/04/16 Срд 03:36:24  715244
>>714878
>Это си? Особо не вникал но float маловат для такого длинного числа. double бы взял или long double.
Да, это Си. В оригинале был тип double. Попробую вернуть, может что поправит.

>>714987
Нет, не особо. Знаю только, что он менее точен, чем double, ну и размерность другая.

>>714933
Надо рандомное число типа double(?) преобразовать с помощью формул, которые приведены в пикрелейтед ОП-посте, в байты Lower / Upper lux threshold для записи.

А потом вычитать их.
Аноним 13/04/16 Срд 03:56:01  715247
>>714502 (OP)
Дабл не нужен. Это анон смеётся над твоей необразованностью.
Суть в том, что в флоате и так есть то, что тебе нужно - мантисса и экспонента.

typedef union {
float f;
struct {
unsigned int mantisa : 23;
unsigned int exponent : 8;
unsigned int sign : 1;
} parts;
} float_cast;

float_cast union_for_cast;
union_for_cast.f = (value / 16) / 0.045;

int fixed_mantisa = union_for_cast.parts.mantisa | 1 << 23;

//fixed_mantisa -= 15 << 16;

fixed_mantisa += 1 << 19;

int fixed_exponent = union_for_cast.parts.exponent;
if (fixed_mantissa >> 24 == 1) {
fixed_exponent++;
fixed_mantisa >>= 1;
}
//if (fixed_mantisa >> 23 == 0) {
//fixed_exponent--;
//fixed_mantissa <<= 1;
//}

return fixed_exponent << 4 + fixed_mantissa >> 20;
Аноним 13/04/16 Срд 04:04:46  715251
>>715247
Закинь, пожалуйста, полные функции записи и чтения.

Они сходятся по формулам с ОП-пикрелейтед?
Аноним 13/04/16 Срд 04:07:41  715252
>>715251
Понятия не имею сходятся ли, не запускал. Нет желания с Си возиться.
Аноним 13/04/16 Срд 05:37:28  715257
>>715252
Ок.

Тгда всё ещё нужна помощь :)
Аноним 13/04/16 Срд 06:55:09  715265
>>715247
>Это анон смеётся над твоей необразованностью.
Ахуеть смищно, уже можно кататься по полу и не вылезать ис пад стала?

[Назад][Обновить тред][Вверх][Каталог] [Реквест разбана] [Подписаться на тред] [ ] 12 | 3 | 5
Назад Вверх Каталог Обновить

Топ тредов