O que significa rand () intervalo% + inferior? [fechadas]
Estou aprendendo C agora e não entendo o que rand() % range + lower
significa 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
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.
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>.