2015-01-08 4 views
-2

Мне нужен код в MS Word VB A, у меня есть последовательность бит как 10110001110000111 .... мой интерес заключается в том, как генерировать случайную последовательность бит, предполагает, что сначала генерирует четвертый бит 1, затем следующий, если мне нужно 3 бита, генерируются три случайных бита как 1 0 1, поэтому, если требуется четыре бита, четыре случайных бита генерируются как 1001. После выполнения всего этого, если я снова запустил, который может снова сгенерировать последовательность бит.Генерировать псевдослучайные биты из строки в msword VBA

+0

Как интересно, я обязан спросить [что вы пробовали?] (Http://mattgemmell.com/what-have-you-tried/) Вы также должны немного уточнить свой вопрос. Вы запрашиваете «случайные» биты, которые на самом деле являются «101» и «1001» соответственно. – RubberDuck

ответ

0

Используйте CRC. Не слишком знакомы с VBA, но если вы используете, например, CRC32, то вы можете создать хороший псевдослучайный бит-поток.

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

Это кодируется как C, а не как VBA, извините, но из памяти VBA предоставляет соответствующие операторы.

int nextbit(void) 
{ 
    uint32_t seed = 1; 

    seed = (seed&0x80000000? 0x04c11db7 : 0)^(seed<<1); 

    return seed&1; 
} 

или

int nextbit(void) 
{ 
    uint32_t seed = 1; 

    seed = (seed&1? 0x82608EDB : 0)^(seed>>1); 

    return seed&1; 
} 

Который, верить этому или нет, как тот же полином. Просто переходите к разным направлениям - полный полином должен быть добавлен 2^32, который обычно считается избыточным. Используемый здесь многочлен - это 32-битный CRC-CCITT, используемый для контрольных сумм данных.

Второй вариант, вероятно, лучше, так как первый начнется с 32 0, прежде чем он начнет двигаться.

Изначальное семя для любого значения, которое вы хотите, и тщательный выбор полинома гарантируют, что он имеет цикл 2^32, прежде чем он повторится.

+0

0x82608EDB == (0x04c11db7 + 2^32)/2, поэтому его же полином. – ilgitano

Смежные вопросы