[Радио 410] [ii.booru-Архив РПГ] [acomics-cf-ost] [𝕏]

[Назад]
Ответ
Leave these fields empty (spam trap):
Тема
Сообщение
Файл
Подтверждение
Перейти к [
Пароль (для удаления файлов и сообщений)
 
ЗАПРЕЩЕНО:
  • детская эротика/порнография
  • троллинг
 
  • Поддерживаются файлы типов GIF, JPG, MP4, OGV, PNG, WEBM, WEBP размером до 5120 кБ.
  • Максимальное количество бампов треда: 500.
  • Всем посетителям рекомендуется ознакомиться с FAQ.

1screen.png - (5 KB, 1327x684)  
5 KB №5379976   #1

Привет, сырны. Какие у вас есть странные, бесполезные и интересные хобби?

У меня хобби не особо интересное, но достаточно странное - я люблю делать на ардуино с помощью oled-дисплея экраны вроде пикрилов (эмулировал в вокве, ирл все атмосфернее), а-ля старые и не особо старые квесты. Знаю, что на ардуино можно делать и обычные игры вроде змейки, тетриса или пакмана, но я слишком туп, чтобы такое реализовать, так что довольствуюсь пикрилейтедами.

>> №5379977   #2
2screen.png - (5 KB, 1344x670)  
5 KB

Вот еще экраны

>> №5379978   #3
3screen.png - (4 KB, 1247x616)  
4 KB
>> №5379979   #4
4screen.png - (4 KB, 1262x634)  
4 KB

Пока что всё

>> №5379982   #5
wind.png - (68 KB, 1920x1080)  
68 KB

>>5379976
О Ретро, ну это моё почёт и уважение. Я рисую, делаю моды, модельки и т.д. для майна, игру свою и много ещё. Кста тоже пиксель артом увлекаюсь. Вот

>> №5379989   #6
117902302_p0.png - (356 KB, 1230x1230)  
356 KB

Битолюбство и микрооптимизации. Как при этом действительно их делать я не знаю.

Скажем вот, найти в строке первую цифру.

Можно просто chr >= '0' && chr <= '9' по каждому символу.

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

uint64_t word = *((uint64_t *)str);
uint64_t upper_bit_is_0 = ~word & 0x8080808080808080; // запоминаем, равен ли 0 старший бит символа
uint64_t reduced = word & ~0x8080808080808080; // сокращаем диапазон возможных значений байтов до 0--0x7f), чтобы можно было векторно сделать вычитание
reduced ^= 0x3030...; // '0' -- это 0x30, '9' -- это 0x39, меняем поисковой диапазон с 0x30--0x39 на 0x00--0x09.
uint64_t has_digit = (0x8989... - reduced) & upper_bit_is_0; // если верхний бит символа равен нулю, а нижние биты символа в нужном диапазоне, устанавливаем верхний бит в 1
uint64_t which = lzcnt(has_digit) >> 3; // по количеству ведущих нулевых битов в маске понимаем, который символ оказался цифрой
str += which;
if(which < 8)
return str;
else
goto новый_цикл;

Чтобы такое работало нужно, чтобы до '\0' гарантированно нашлась цифра. Но можно параллельно и '\0' искать таким же образом и по-and'ить c has_digit. Кажется, strchr реализован похожим образом для некоторых архитектур. https://elixir.bootlin.com/glibc/glibc-2.35/source/sysdeps/aarch64/strchr.S Там явно какая-то теория замешана; то, что у меня поименовано which, они называют syndrome, явно специализированный термин. Но где про такую магию почитать? В университете не про такое рассказывали.

Меж тем, это пока поиск символа или целостного их диапазона. Что насчёт [a-zA-Z]? можно ли каким-то образом сложить простанство символов, чтобы диапазоны a-z и A-Z совпали? А если вместо [a-zA-Z] там что-то совсем не continuous? Описан ли алгоритм, который для произвольного содержимого [] генерирует эффективную программу поиска символа, работающую по указанному принципу? ЕМНИП, в движках для регулярок jump таблицы используются, а не это вот, но там и запросы сложнее.

>> №5379991   #7

>>5379989
Лет 30-40 назад ты был бы незаменимым специалистом.

>> №5379997   #8

>>5379989
https://github.com/Perl/perl5/blob/blead/regen/regcharclass.pl

>> №5379998   #9
cat_screen1.png - (2 KB, 790x394)  
2 KB

>>5379982
О, неплохо, даже очень неплохо.

>> №5379999   #10
cd_screen.png - (2 KB, 718x361)  
2 KB

>>5379989

>А можно попытаться воспользоваться побитовыми операциями над обычными регистрами как своего рода векторными инструкциями над упакованными байтами.

Что-то на умном.

>> №5380063   #11

>>5379989

>Там явно какая-то теория замешана; то, что у меня поименовано which, они называют syndrome, явно специализированный термин.

Не моя специальность, но термин syndrome используется в контексте кодов Хэмминга, которые используются для обнаружения и корректировки ошибок при передачи данных. Как я понял, syndrome обозначает состояние битов чётности, по которому можно определить есть ли ошибки и какой именно бит или биты получили некорректное значение.

Судя по тексту комментария в glibc, мне кажется, что тут syndrome означает состояние битовой структуры, по которому можно определить есть ли искомый символ (или \0) и какой именно байт содержит его.

Мне кажется, писавший код в glibc просто использовал понятный ему термин из теории кодирования по аналогии.

>> №5380114   #12
1758059954336169411257752795544.png - (24 KB, 576x273)  
24 KB

Обожаю изучать числа, в особенности простые. У меня есть документ, куда я выписываю интересные свойства чисел/группы чисел, и потом все это изучаю. Смысла в этом особо нет, ибо я по профессии не математик, а сварщик.



Удалить сообщение []
Пароль
[d | b / bro / cu / dev / hr / l / m / mu / o / s / tran / tu / tv / vg / x | a / aa / c / fi / jp / rm / tan / to / ts / vn]
- [Радио 410] [ii.booru-Архив РПГ] [acomics-cf-ost] [𝕏] - [Архив - Каталог] [Главная]