Instrukcja losująca w Assemblerze

0

Jak mam już się wpisywać to na maxa :).
Wiecie może jak napisać instrukcję losującą w asmie ?????

0

Najprostszą metodą (nie licząc wykorzystywania do tego celu wbudowanych w procesory Intela instrukcji SSE) jest algorytm Lehmer\\\'a. Po angielsku nazwali to Linear Congruenial Method (nie mam pojęcia co to znaczy dosłownie).
Jeżeli mamy tablicę:
a: array [1..n] of JakiśTypLiczbowy;

to:

for i := 2 to n do
a[j] := (a[ j - 1 ]*b+1) mod m;

W ten sposób otrzymujesz liczby pseudolosowe z zakresu
Oczywiście bardzo ważne jest dobrać stałe b i m (zawartość a[1] jest już mniej istotna), żeby otrzymywać liczby w miarę jak najbardziej losowe. Zaleca sie używać dosyć dużych wartości dla m (więcej liczb możliwych do wylosowania), a b powinno zawierać ok. o jedną cyfrę mniej niż m i kończyć się na x21 gdzie x jest liczbą parzystą (różne dziwne rzeczy się zdarzają w innych przypadkach: bardzo często powtarzające się kombinacje).

To oczywiście jeden z najprostrzych algorytmów.
A jak na assemblera to przerobić, to już nie powinno stwarzać większych problemów (jeżeli znasz asm)

--
Jest jeszcze jeden błąd ... :)

Apel: Piszcie w tematach o jaki język programowania chodzi np. : [Delphi], [C++], itp.

0

Linear Congruential Method - po polsku metoda kongruencji liniowej. Wspomina o niej Knuth w 2 tomie. Ogólnie to parametry są nie dwa, a trzy:

moduł m;
mnożnik c;
potencjał a;

oraz naturalnie ziarno, czyli X(0)

całość zdefiniowana jest rekurencyjnie:

X(n+1) = (aX(n) + c) mod m

O odpowiednim doborze tych parametrów napisano niejedną książkę, a metoda należy do najbardziej popularnych. Naturalnie wartość ziarna powinna być inicjowana wartością losową taką jak wskazanie zegara systemowego.

Skąd można pobrać ciekawego avatara?

0

Linear Congruential Method - po polsku metoda kongruencji liniowej.

To mówi mi tyle samo co angielska nazwa :)

mnożnik c;

Dlaczego to nazywa się mnożnik? Ja bym to nazwał składnik. Tu się dodaje.

A jeszcze jest modyfikacja tego "Additive congruential method".
Po prostu zamiast dodawać jakąś stałą c (niech będzie mnożnik) i element poprzedni, to dodaje do siebie jakieś dwie wcześniej wyliczone liczby np. a[n-2]+a[n-4] zamiast a[n-1] - 1.

Skąd można pobrać ciekawego avatara?

Potrzebujesz kapustki? :-)

--
Jest jeszcze jeden błąd ... :)

Apel: Piszcie w tematach o jaki język programowania chodzi np. : [Delphi], [C++], itp.

0

A nie lepjej pobierać milisekundy i ew. mnożyć przez sekundy :-)

--
Nieważne czy producent jest z Ameryki czy z Niemiec i tak wszystko jest z Tajwanu

1 użytkowników online, w tym zalogowanych: 0, gości: 1