powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Проблема с битовыми строками.
7 сообщений из 7, страница 1 из 1
Проблема с битовыми строками.
    #38054019
SergeyMi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, доброго дня.

Вот проблемма у нас с битовыми строками.
Помогите, кто может уже наступал на эти грабли.

Есть массив битовых строк. Он реальный и выдран из живой бд.
С этим массивом делаем битовые операции.
И происходит ошибка <INVALID BIT STRING>getAND+4^Sample.
Что характерно, если уменьшить длину битовой строки, то ошибка не происходит.

Вот рутина воспроизводящая ошибку. Она есть и в архиве. В архиве и проблемный массив.

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
test
 s gl="^ZZ"
 s len=200000
 ;s len=196608  ;эта длина битовой строки ошибки не даёт
 w !,"в глобале битовые строки " 
 s i=gl f  s i=$q(@i) q:i=""  w !,i w $bitcount(@i,1),"+",$bitcount(@i,0),"=",($bitcount(@i,1)+$bitcount(@i,0))
 n res m res=@gl
 n res1 m res1=@gl
 ;размёржим его в две локали
 n tmp
 d getAND(.res,.res1,.tmp) w !,"Применим логическую ""&"" - ошибки нет"
 k tmp 
 s $bit(tmp(1),1)=0 ;инициализируем битовую строку
 w !,"Применим логическую ""или"" "
 d getOR(.res1,.tmp,.tmp)
  w !,"А потом снова ""&"" - получается ошибка, Выходит что операция OR ломает битовую стоку! Почему?"
 d getAND(.res,.tmp,.tmp)
 ;Другие битовые строки такой ошибки не давали.
 ;Проверяли на Cache for Windows (x86-32) 2012.1.2 (Build 702U)
 ;Cache for Windows (x86-32) 2012.2.0
 ;Cache for Windows (x86-32) 2012.2.1
 ;Cache for Windows (x86-32) 2011.
 ;Пробовали разные collation
 q
 
getAND(a,b,res)
 new block,count
 i $o(a(""),-1)>$o(b(""),-1) s count=$o(a(""),-1) ;вычислим мах кол-во блоков
 e  s count=$o(b(""),-1)
 f block=0:1:count s res(block)=$bitlogic(a(block)&b(block),len)
 q
  
getOR(a,b,res)
 new block,count
 i $o(a(""),-1)>$o(b(""),-1) s count=$o(a(""),-1) ;вычислим мах кол-во блоков
 e  s count=$o(b(""),-1)
 f block=0:1:count s res(block)=$bitlogic(a(block)|b(block),len)
 q
...
Рейтинг: 0 / 0
Проблема с битовыми строками.
    #38054075
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
больше всего мне в вашем примере не понравилось использование длины в логических операторах
зачем вы умышленно увеличиваете количество элементов в битовом массиве
длина битовых строк во операциях желательно должны быть одинакова
в последнем элементе массива битов может быть меньше

в вашем случае если вам понадобится сделать операцию Not, то у вас появятся не существующие элементы в массиве, которые выйдут за пределы существующих значений

в общем ваша задача решается если, битов в операндах будет одно, либо вы откажитесь от указания длины
...
Рейтинг: 0 / 0
Проблема с битовыми строками.
    #38054085
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergeyMiВот проблемма у нас с битовыми строками.
Помогите, кто может уже наступал на эти грабли.
Код: javascript
1.
2.
3.
4.
test
 s gl="^ZZ"
 s len=200000
 ;s len=196608  ;эта длина битовой строки ошибки не даёт


Наступал. Пока проблема решается только ограничением числа бит в битовой строке 64000. Значения 196608 и другие больше чем 64000 это частные случаи, о причинах и более детально может ответить WRC.
...
Рейтинг: 0 / 0
Проблема с битовыми строками.
    #38054198
SergeyMi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну яНаступал. Пока проблема решается только ограничением числа бит в битовой строке 64000. Значения 196608 и другие больше чем 64000 это частные случаи, о причинах и более детально может ответить WRC.

Спасибо, будем обращаться в WRC.
...
Рейтинг: 0 / 0
Проблема с битовыми строками.
    #38054316
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну яПока проблема решается только ограничением числа бит в битовой строке 64000
Ага, и битмап индексы хранятся как битовые строки по 64000.
...
Рейтинг: 0 / 0
Проблема с битовыми строками.
    #38056677
SergeyMi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо за участие. Проблему решили уменьшением битовой строки до 64000.
...
Рейтинг: 0 / 0
Проблема с битовыми строками.
    #38081904
Дмитрий64
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SergeyMi,
неужто с 2003 года не все баги с битовыми строками >64000 бит вычищены? Мне тогда ещё Николай Жохов этот workaround посоветовал.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Проблема с битовыми строками.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]