Trích:
Nguyên văn bởi phamminhtuan
Đây là code tính random của CCS C - thư viện stdlib.h, mô phỏng 10 lần ra giá trị "ngẫu nhiên" chỉ có 1.
PHP Code:
unsigned int32 _Randseed;
unsigned int16 rand(void)
{
_Randseed = _Randseed * 1103515245 + 12345;
return ((unsigned int16)(_Randseed >> 16) % RAND_MAX);
}
void srand(unsigned int32 seed)
{
_Randseed = seed;
}
Ai có giải thuật tính random khác không nhỉ, như cái dùng Timer chẳng hạn, cho nó chạy tự do, khi nào cần thì cứ lấy giá trị, muốn lấy giới hạn bao nhiêu thì cứ module bấy nhiếu, muốn thành thập phân thì giống như chizardxx nói
|
Đây là giải thuật để tạo ra dãy uniform pseudo-random (tạm dịch: giả ngẫu nhiên), theo mình biết giải thuật này nằm trong cuốn "The C programming language".
Uniform mang nghĩa dãy phân phối đều, tức là xác suất để các con số xuất hiện trong dãy là như nhau.
Dãy pseudo-random phụ thuộc vào trạng thái ban đầu (seed), nếu tạo dãy với seed giống nhau thì kết quả lúc nào cũng như nhau.
Để dãy gần với ngẫu nhiên thì seed cũng phải có tính ngẫu nhiên. Cách dễ nhất để có seed gần với ngẫu nhiên là lấy thời gian hiện tại. Với VDK có thể dùng RTC hoặc timer + các biến đếm để xác định thời gian trôi qua, sau đó tính toán các giá trị này và seed cho pseudo-random generator.