Rand ()% range + lower หมายถึงอะไร? [ปิด]

Dec 18 2020

ตอนนี้ฉันกำลังเรียนรู้ C และฉันไม่เข้าใจว่าrand() % range + lowerโค้ดในบรรทัดนี้หมายถึงอะไร

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);

คำตอบ

SergeBallesta Dec 18 2020 at 18:24

นี่คือเครื่องกำเนิดไฟฟ้าแบบสุ่มเชิงเส้นของชายผู้น่าสงสาร

มันเป็นแบบสุ่มแน่นอนเพราะถูกป้อนจากrand()ที่ส่งคืนจำนวนเต็มแบบสุ่มและโดยการสร้างค่าคือ> = ต่ำกว่าและ <= บน

แต่ก็ยังคงเป็นเครื่องมือของคนไม่ดีเนื่องจากค่าในช่วง [ล่าง, บน] อาจมีความน่าจะเป็นที่แตกต่างกัน

เรื่องยาวทำให้สั้นสามารถใช้ได้หากคุณต้องการค่าสุ่มบางอย่าง แต่ไม่ควรเป็นหากคุณต้องการแหล่งข้อมูลแบบสุ่มที่ปลอดภัยในการเข้ารหัส

JhnW Dec 18 2020 at 18:32

โปรดอ่านตัวดำเนินการ abut% มันคือการแบ่งโมดูโล การแบ่ง Modulo เป็นเครื่องมือที่ดีในการทำแผนที่ช่วงที่ใหญ่ที่สุดไปยังช่วงที่สั้นที่สุด (ในกรณีของคุณช่วงrand ()% ) คุณเพียงแค่ต้องเพิ่มจุดเริ่มต้นของช่วงเพื่อเปลี่ยนค่าทั้งหมดเพื่อแก้ไขตำแหน่ง รหัสแรนด์ () ช่วง% + ต่ำกว่าเป็นสำนวน C มาตรฐานเพื่อรับตัวเลขสุ่มจากช่วง A, B คุณสามารถค้นหาสำนวนเพิ่มเติมตัวอย่างเช่นสำหรับตัวเลขทศนิยมที่มีช่วง (A, B) หรือช่วง <A, B>