O que significa rand () intervalo% + inferior? [fechadas]

Dec 18 2020

Estou aprendendo C agora e não entendo o que rand() % range + lowersignifica nesta linha de código.

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

Respostas

SergeBallesta Dec 18 2020 at 18:24

Este é um gerador aleatório linear de um pobre homem.

Na verdade, é aleatório porque é alimentado pelo rand()qual retorna um inteiro aleatório e, por construção, o valor é> = inferior e <= superior.

Mas ainda é uma ferramenta de homem pobre porque os valores no intervalo [inferior, superior] podem ter probabilidades diferentes.

É uma longa história resumida, ele pode ser usado se você precisar apenas de alguns valores aleatórios, mas não deveria ser se você precisar de uma fonte aleatória segura criptográfica.

JhnW Dec 18 2020 at 18:32

Por favor, leia sobre o operador%. É a divisão do módulo. A divisão do módulo é uma boa ferramenta para mapear uniformemente o maior intervalo para o menor intervalo (no seu caso, rand () intervalo% ). Você só precisa adicionar o início do intervalo para mudar todos os valores para as posições corretas. Código rand ()% range + lower é o idioma C padrão para obter números aleatórios do intervalo A, B. Você pode encontrar mais expressões idiomáticas, por exemplo, para números de pontos flutuantes com intervalo (A, B) ou intervalo <A, B>.