Apa artinya rand ()% range + lebih rendah? [Tutup]
Saya sedang belajar C sekarang dan saya tidak mengerti apa arti rand() % range + lower
dari baris kode ini.
printf("I will generate 10 random numbers between %d and %d . . .\n", lower, upper);
int range = upper - lower+1;
for(int i = 0; i <= 10; i++) {
int number = rand() % range + lower;
printf("%d\t", number);
Jawaban
Ini adalah generator acak linier orang miskin.
Ini memang acak karena diumpankan dari rand()
yang mengembalikan bilangan bulat acak, dan dengan konstruksi nilainya adalah> = lebih rendah dan <= atas.
Tetapi ini masih merupakan alat orang miskin karena nilai dalam interval [bawah, atas] mungkin memiliki probabilitas yang berbeda.
Singkat cerita, ini dapat digunakan jika Anda hanya memerlukan beberapa nilai acak tetapi tidak boleh digunakan jika Anda memerlukan sumber acak yang aman dan kriptografi.
Harap baca tentang% operator. Ini adalah divisi modulo. Divisi modulo adalah alat yang baik untuk memetakan rentang terbesar hingga terpendek (dalam kasus Anda rand ()% rentang ). Anda hanya perlu menambahkan awal rentang untuk menggeser semua nilai ke posisi yang benar. Kode rand ()% range + lower adalah idiom C standar untuk mendapatkan bilangan acak dari range A, B. Anda dapat menemukan lebih banyak idiom, misalnya untuk bilangan floating-point dengan rentang (A, B) atau rentang <A, B>.