Я пытаюсь получить следующий код, работающий для сдвигового регистра Фибоначчи для генерации псевдослучайных чисел. Может показаться, чтобы не получить его работы, так (есть) есть какие-либо очевидные проблемы (?)Генератор псевдослучайных чисел Фибоначчи
Shared Function Main() As Integer
Dim start_state As UShort = &HACE1UI ' Any nonzero start state will work.
Dim lfsr As UShort = start_state
Dim bit As UInteger
Dim period As UInteger = 0
Do While lfsr <> start_state
' taps: 16 14 13 11; feedback polynomial: x^16 + x^14 + x^13 + x^11 + 1
bit = ((lfsr >> 0) Xor (lfsr >> 2) Xor (lfsr >> 3) Xor (lfsr >> 5)) And 1
lfsr = (lfsr >> 1) Or (bit << 15)
period += 1
Loop
Return 0
End Function
Последний, это «период» должны быть разделены большим целым числом, чтобы получить U (0,1) «s?
Ниже исходный C++ код:
# include <stdint.h>
int main(void)
{
uint16_t start_state = 0xACE1u; /* Any nonzero start state will work. */
uint16_t lfsr = start_state;
uint16_t bit; /* Must be 16bit to allow bit<<15 later in the code */
unsigned period = 0;
do
{
/* taps: 16 14 13 11; feedback polynomial: x^16 + x^14 + x^13 + x^11 + 1 */
bit = ((lfsr >> 0)^(lfsr >> 2)^(lfsr >> 3)^(lfsr >> 5)) & 1;
lfsr = (lfsr >> 1) | (bit << 15);
++period;
} while (lfsr != start_state);
return 0;
}
Тело цикла не будет введен, потому что 'LFSR = start_state'. Попробуйте выполнить код, чтобы узнать, что происходит. – dummy
он был преобразован из кода C++, который имел этот оператор, по существу, в строке «Loop». – wrtsvkrfm