![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Алгоритм случайных чисел [D6, Win95/98, WinME, Win2k, WinXP]
ZMaxim © (2002-09-14 17:09:00)Уважаемые мастера, очень нужен алгоритм случайных чисел, подскажите как написать или где взять. Заранее благодарен.
Sharik_212 (2002-10-17 18:45:00) [1]Если дело не идет о серьезной криптографии, то в принципе можно довольствоваться стандартными функциями Random(n). Перегенерить можно с помощью Randomize. "Ручками" установить "начало" генерации - RandSeed:=[любое из Intrger]
Ru (2002-10-17 17:49:00) [2]>Losyara (18.09.02 11:50)
можно обойтись без всех этих алгоритмов в более-менее простом случае. Есть ситуации когда алгоритмов мало!
sancho (2002-09-25 22:22:00) [3]А по-моему
.....
var
x:real;
.....
begin
randomize;
x:=random;
end;
Poirot (2002-09-18 21:34:00) [4]Бла-бла-бла!!!
Математик это еще не то слово!!! Доживите до такой известности, а потом говорите!!!
Ketmar (2002-09-18 12:44:00) [5]2Losyara:
однако, тут, оказывается, есть крутейшие математики. Кнут что? дерьмо ваш Кнут. тупица. бездарь. а вот Я!
продемонстрировать ваш крутой алгоритм с соотв. математическими доказательствами не хотите?
для справки: Randomize - это не алгоритм. и даже случайное число не генерирует. слечайное число генерирует функция Random() %-)
Satanas Nobiscum! 18-Sep-XXXVII A.S.
Losyara (2002-09-18 11:50:00) [6]Все эти алгоритмы гавно полное. Особенно Randomize. Лучшее решение - это написать самому. Даже у Кнута они слабоваты. Но в принципе если ты решаешь не математическую задачу, то тебе должно быть по барабану.
Ketmar (2002-09-17 16:33:00) [7]берем Mersenne Twister и наслаждаемся. почему Мерзен? а имя нравится %-))
Satanas Nobiscum! 17-Sep-XXXVII A.S.
Mystic (2002-09-16 00:02:00) [8]Несколько генераторов RND от Д. Кнута:
http://www-cs-faculty.stanford.edu/~knuth/programs/rng-double.c
http://www-cs-faculty.stanford.edu/~knuth/programs/rng.c
Об основах построения ГСЧ можно почитать у него же, только использовать их имеет смысл только в сверх-научных приложениях, либо в исследовательских целях.
- Lazure - (2002-09-15 23:35:00) [9]
RandSeed dd 0
RandSave DW 0
Randomize Proc
mov ah,2Ch
int 21h
mov Word ptr cs:[RandSeed],cx
mov Word ptr cs:[RandSeed+2],dx
ret
Randomize endP
; In: AX - Range
; Out: AX - Value within 0 through AX-1
Random proc
PUSHA
mov cx,ax ; save limit
mov ax,Word ptr cs:[RandSeed+2]
mov bx,Word ptr cs:[RandSeed]
mov si,ax
mov di,bx
mov dl,ah
mov ah,al
mov al,bh
mov bh,bl
xor bl,bl
rcr dl,1
rcr ax,1
rcr bx,1
add bx,di
adc ax,si
add bx,62e9h
adc ax,3619h
mov word ptr cs:[RandSeed],bx
mov word ptr cs:[RandSeed+2],ax
xor dx,dx
div cx
mov CS:[RANDSAVE],dx ; return modulus
POPA
MOV AX,CS:[RANDSAVE]
ret
Random EndP
а вот насчет Int21h - надо наверно еще подумать...
Just_user_x (2002-09-15 14:29:00) [10]Точно!
===
Идем на Search, в строке запроса набираем: Random. Смотрим результат и выбираем. Вот некоторые ссылки:
То что выше, но на Pascal
- http://www.torry.net/vcl/science/other/rmar.zip
еще:
- http://www.torry.net/vcl/science/statistic/amrandomx.zip
Just_user_x (2002-09-15 13:48:00) [11]Вообще-то можно поискать на www.torry.net. Если не ошибаюсь, что-то там проявлялось по данному вопросу, с исходниками.
Just_user_x (2002-09-15 13:44:00) [12]/*
C This random number generator originally appeared in "Toward a Universal
C Random Number Generator" by George Marsaglia and Arif Zaman.
C Florida State University Report: FSU-SCRI-87-50 (1987)
C
C It was later modified by F. James and published in "A Review of Pseudo-
C random Number Generators"
C
C THIS IS THE BEST KNOWN RANDOM NUMBER GENERATOR AVAILABLE.
C (However, a newly discovered technique can yield
C a period of 10^600. But that is still in the development stage.)
C
C It passes ALL of the tests for random number generators and has a period
C of 2^144, is completely portable (gives bit identical results on all
C machines with at least 24-bit mantissas in the floating point
C representation).
C
C The algorithm is a combination of a Fibonacci sequence (with lags of 97
C and 33, and operation "subtraction plus one, modulo one") and an
C "arithmetic sequence" (using subtraction).
C========================================================================
This C language version was written by Jim Butler, and was based on a
FORTRAN program posted by David LaSalle of Florida State University.
*/
#include
#include
#define TRUE -1
#define FALSE 0
#define boolean int
static void rmarin(int ij, int kl);
void ranmar(float rvec[], int len);
void main()
{
float temp[101];
int ij, kl, len, i;
/* random seeds for the test case: */
ij = 1802;
kl = 9373;
/* do the initialization */
rmarin(ij,kl);
/* generate 20,000 random numbers */
len = 100;
for (i=1; i
NetBreaker666 (2002-09-14 22:02:00) [13]использую GetTickCount + random + кол-во тактов процессора (начиная с MMX)
Anatoly Podgoretsky (2002-09-14 18:02:00) [14]Стандартные по какой то причине не устраивают?
Ну тогда тебе в проект UBFPD
lobity (2002-09-14 17:26:00) [15]Знаешь такой оператор - Randomize? Если тебя интересует алгоритм написания: Работай со временем, датой, складывай, вычитай, дели и т. п. и т. д.