Сейчас на форуме: Kybyx (+1 невидимый пользователь)

 eXeL@B —› Оффтоп —› упростить бинарную формулу
Посл.ответ Сообщение


Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 16 июня 2019 18:53
· Личное сообщение · #1

(~n & w) | (n&(w-1))

игрался http://cpp.sh/56gb3

n & (w-1) очень похоже на n%w
но по отдельности это не упростить
может даже не в одну строку а в целую функцию




Ранг: 271.4 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 16 июня 2019 21:44 · Поправил: f13nd
· Личное сообщение · #2

Правая часть остаток от деления на w, если w степень двойки. У левой арифметический смысл только в том, что среди слагаемых n - степеней 2 нет w, тогда w прибавляется к остатку.

-----
2 оттенка серого





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 16 июня 2019 21:49 · Поправил: reversecode
· Личное сообщение · #3

псевдокод ?
а что он делает я и так знаю
построение дерева меркель

Добавлено спустя 7 минут
у меня сомнение в том что человек сразу писал такой код
и это либо компилер соптимайзил то понять что было в оригинале
либо оптимайзил уже человек, и хочется понять первичную формулу от которой он отталкивался



Ранг: 64.9 (постоянный), 47thx
Активность: 0.120.02
Статус: Участник

Создано: 20 июня 2019 14:13
· Личное сообщение · #4

ставим биты по маске n в слове w по странной зависимости от самого слова w?

(~n & w) | (n & (w-1))

если w-1==0 то w&~n
если w-1==-1 то w|n

|
w 000
n 010
out 010 // always the mask itself?

&
w 001
~n 101
out 001

другие примеры не обдумывал, страшно и безсмысленно

Добавлено спустя 10 минут
ой не ошибка в первом же примере с |, w==000...
но жопой чую это с масками магия, без бранчей в зависимости от w
наверно компиль берёт универсальную формулу эту и подставляет её куда не лень




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 20 июня 2019 16:30
· Личное сообщение · #5

не странный а обычный merkle tree
вот оригинальный алго с бранчами и интересен



Ранг: 64.9 (постоянный), 47thx
Активность: 0.120.02
Статус: Участник

Создано: 20 июня 2019 19:17
· Личное сообщение · #6

при чём здесь меркле то? меркле хэшики из хэшиков делает, в принципе
а тут одна бинарная операция и как её связывать с "построение дерева меркель" тебе только известно

вот нормальная, не странная версия алго, х bool, ноль или один
(~n & w) | (n & -x)
==
if (x) { w = w | n } // set bits
else { w = w & ~n } // clear bits

а у тебя w-1 вместо -х, вот и думай шо туда попадает
и как на шо влияет

чуть довавив
#if 1
printf("(");
printf("N ");
printb(n);
printf(" W ");
printb(w);
printf(" X ");
printb((~n & w)|(n&(w-1)));
printf(" SET ");
printb((n | w) );
printf(" CLE ");
printb((~n & w) );
//if ( ((n+1) % (w)) != ( (~n & w)|(n&(w-1)) )) printf("NEQ");
printf(") ");
#endif

заметил лишь только то шо длинна маски n не влияет на выход x, он всегда обрезаеца до длины слова w

больше думать не могу но оно уже ближе модуло...



Ранг: 64.9 (постоянный), 47thx
Активность: 0.120.02
Статус: Участник

Создано: 02 августа 2019 17:41
· Личное сообщение · #7

ну так чё какие результаты?




Ранг: 338.5 (мудрец), 349thx
Активность: 2.112.42
Статус: Участник

Создано: 04 августа 2019 19:41 · Поправил: difexacaw
· Личное сообщение · #8

reversecode

Это не бинарная(булева) формула, а аналого-цифровая. Есть операция вычитания, если w не булева переменная, то выражение не известно как свернуть, я такое уже спрашивал --> Link <--

Если бы это был инкремент, то можно было бы использовать закон A - B = NOT(B) + A + 1. Как быть с деком хз.

-----
vx





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 22 августа 2019 19:05
· Личное сообщение · #9

мне надо не свернуть а наоборот развернуть


 eXeL@B —› Оффтоп —› упростить бинарную формулу

У вас должно быть 20 пунктов ранга, чтобы оставлять сообщения в этом подфоруме, но у вас только 0

   Для печати Для печати