Apa artinya rand ()% range + lebih rendah? [Tutup]

Dec 18 2020

Saya sedang belajar C sekarang dan saya tidak mengerti apa arti rand() % range + lowerdari 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

SergeBallesta Dec 18 2020 at 18:24

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.

JhnW Dec 18 2020 at 18:32

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>.