30/09/2018, 22:12
Hỏi về cách lập ct sinh ra 1 số ngẫu nhiên trong c++
E đang học khóa học c++ cho người mới bắt đầu… Ở phần bài tập của bài if statement có câu hỏi yêu cầu viết có sinh ra 1 số ngẫu nhiên từ 0 tới 100… Mà ở các bài trc đó mình chưa thấy đề cập tới phần này… có ai giúp mình với… Mình là người mới học nên chưa biết.
Bài liên quan
Ko biết ở các bài sau có ko… Nếu ko thì mong m.n giúp
Khai báo thư viện time.h rồi dùng hàm rand();
VD:
Muốn lấy giá trị ngẩu nhiên trong khoảng thì kết hợp với chia lấy dư (%) rồi + - gì đó .
Hình như có khai báo thư viện
stdlib.h
nữa không nhớ rõ.cái này dành cho người chưa học rand. Cho vui tí thôi chứ cái này không nên dùng
Cái này dành cho người đã học rand.
Cái chia là sao bác @@ em chưa hiểu lắm
Cái đó không phải chia, bạn cứ hiểu đó là một phần của cú pháp random đi, bạn xem video của anh đạt để hiểu thêm nhé
nếu muốn hàm random range tốt thật sự thì nên xài mấy hàm trong thư viện C++11
<random>
ấy.chạy cái code này trên g++ là thấy: http://ideone.com/d8UhWw
output
tại sao lại có chuyện ko đồng đều khi xài modulo thì lý do là vì
rand()
random từ 0 tới 231 - 1 nói chung là 2.147 tỷ mấy Nếu lấyrand()
modulo cho 1 tỷ thì với 4 tỷ số đầu ok (giả sử là nó ngẫu nhiên “hoàn hảo”), nhưng 0.147 tỷ số sau 4 tỷ sẽ gây ra mất cân bằng. Nói chung là modulo số càng gần với RAND_MAX thì càng mất cân bằng. Trong C thì RAND_MAX chỉ cần >= 32767. VC++ làm vừa đúng yêu cầu luôn, nên % 1 tỷ ko được, mà % 10k là vấn đề lồ lộ rồi.với
std::uniform_int_distribution
thì sẽ ko có chuyện này. Nhưng vấn đề phức tạp hơn vì đòi phải có 1 cái random number generator. Thông thường xàistd::mt19937
là đủ, nhưng seed cho nó rất là khó nhớ so vớisrand
. 1 cách khác là xàistd::random_device
làm generator, nhưng nó chậm, nên thường chỉ xài nó làm seed cho mt19937, nhưng lại có vấn đề khác là tiêu chuẩn ko yêu cầu random_device là non-deterministic generator, nên ko phải lúc nào cũng xài random_device được…