Rumah >pembangunan bahagian belakang >C++ >Mengapa rand() Menjana Nombor Yang Sama, dan Bagaimana Saya Boleh Membetulkannya?

Mengapa rand() Menjana Nombor Yang Sama, dan Bagaimana Saya Boleh Membetulkannya?

Barbara Streisand
Barbara Streisandasal
2024-12-14 16:05:13217semak imbas

Why Does rand() Generate the Same Numbers, and How Can I Fix It?

Menyelesaikan Gelagat Bukan Rawak rand()

Apabila melaksanakan program menggunakan fungsi rand(), pengguna kerap menghadapi isu untuk mendapatkan konsisten urutan berangka. Artikel ini menyiasat sumber tingkah laku ini dan mencadangkan penyelesaian untuk memastikan rawak sebenar.

Fungsi rand() menjana nombor pseudorandom, yang bukan secara rawak tetapi berdasarkan algoritma tertentu. Algoritma ini menjalani transformasi matematik menggunakan benih atau nombor rawak sebelumnya, yang menghasilkan ketak rawak yang diperhatikan.

Untuk mengatasi isu ini, kita perlu menetapkan benih rawak untuk penjana nombor rawak. Ini boleh dicapai menggunakan fungsi srand() dengan hujah berdasarkan masa sistem atau sumber bukan deterministik lain. Dengan memulakan benih dengan nilai yang berbeza setiap kali, kami menetapkan semula algoritma penjanaan nombor rawak dengan berkesan, memastikan hasil yang lebih rawak.

Pertimbangkan contoh berikut:

#include <iostream>
#include <cstdlib>
#include <ctime>

int main() {
    srand((unsigned int)time(NULL));
    std::cout << rand() << std::endl;
    return 0;
}

Dalam contoh ini, kami menggunakan srand() dengan benih yang diperoleh daripada masa sistem semasa. Apabila masa sistem sentiasa berubah, jujukan nombor rawak juga akan berbeza-beza, membawa kepada rawak sebenar.

Untuk maklumat lanjut tentang konsep penjana nombor pseudorandom, rujuk kepada yang disediakan pautan:

  • http://www.dreamincode.net/forums/topic/24225-random-number-generation-102/
  • htt p://www.dreamincode.net/forums/topic/29294-making-pseudo-random-number-generators-more-random/

Atas ialah kandungan terperinci Mengapa rand() Menjana Nombor Yang Sama, dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn