rand() – Sinh số ngẫu nhiên giả
Trả về int trong khoảng [0, RAND_MAX] (thường 32767). Cùng seed -> cùng chuỗi. Khai báo trong <stdlib.h>.
int rand(void);
Ví dụ
#include <stdio.h>
#include <stdlib.h>
int main() {
printf("%d\n", rand());
printf("%d\n", rand());
return 0;
}
Kết quả (ví dụ)
1804289383
846930886
srand() – Khởi tạo seed
Đặt seed cho rand(). Seed giống nhau -> chuỗi giống nhau. Thường dùng time(NULL) để seed khác nhau mỗi lần chạy. Không trả về giá trị.
void srand(unsigned int seed);
Ví dụ
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
srand(time(NULL)); // Seed tu thoi gian
printf("%d\n", rand());
srand(12); // Seed co dinh
printf("%d\n", rand());
return 0;
}
Kết quả
1432462941 (khac moi lan chay)
1687063760 (luon giong nhau voi seed=12)
Cải tiến: Random trong khoảng [min, max]
int rand_range(int min, int max) {
return min + rand() / (RAND_MAX / (max - min + 1) + 1);
}
Lưu ý quan trọng:
rand()chất lượng thấp, không dùng cho crypto/security.- C++11+: Dùng
<random>(std::mt19937,std::uniform_int_distribution) – chất lượng cao, linh hoạt. - Chỉ gọi
srand()một lần ở đầu chương trình. RAND_MAXthường 32767 (15-bit) – nhỏ.