Rand ()% aralığı + daha düşük ne demektir? [kapalı]
Şu anda C öğreniyorum ve rand() % range + lower
bu kod satırının ne anlama geldiğini anlamıyorum .
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);
Yanıtlar
Bu, fakir bir adamın doğrusal rastgele üretecidir.
Gerçekten rastlantısaldır, çünkü içinden rand()
rastgele bir tamsayı döndüren beslenir ve yapım gereği, değer> = alt ve <= üsttür.
Ama yine de kötü bir adamın aracıdır çünkü [alt, üst] aralıktaki değerler farklı olasılıklara sahip olabilir.
Uzun lafın kısası, sadece bazı rastgele değerlere ihtiyacınız varsa kullanılabilir, ancak şifreleme güvenli bir rastgele kaynağa ihtiyacınız varsa olmamalıdır.
Lütfen abut% operatörünü okuyun. Modulo bölümüdür. Modulo bölümü, en büyük aralığı en kısa aralığa (sizin durumunuzda rand ()% aralığı ) tek tip eşleme için iyi bir araçtır . Tüm değerleri doğru konumlara kaydırmak için yalnızca aralık başlangıcı eklemeniz gerekir. Rand ()% range + lower kodu , A, B aralığından rastgele sayılar elde etmek için standart C deyimidir. Örneğin (A, B) aralığı veya <A, B> aralığı olan kayan noktalı sayılar için daha fazla deyim bulabilirsiniz.