Rand ()% aralığı + daha düşük ne demektir? [kapalı]

Dec 18 2020

Şu anda C öğreniyorum ve rand() % range + lowerbu 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

SergeBallesta Dec 18 2020 at 18:24

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.

JhnW Dec 18 2020 at 18:32

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.