Как работает строчка кода

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
    srand(time(NULL));
    int sign;
    unsigned int n, countNeg = 0, countInterv = 0, MAX_a;
    double a;
    printf("Enter n: ");
    scanf("%u", &n);
    printf("Enter max a: ");
    scanf("%u",&MAX_a);
    for (int i = 1; i <= n; i++)
    {
       sign = rand() % 2;
       if(sign == 0)
       {
       a = (double)rand() / (double)RAND_MAX * (rand() % MAX_a + 1);
       if (a >= 1 && a <= 2)
        countInterv++;
       }
       else if(sign == 1)
       {
           a = ((double)rand() / (double)RAND_MAX * (rand() % MAX_a + 1)) * (-1.0);
            countNeg++;
           if(a == -0)
               a = 0;
       }
 
        printf("a%d = %.3lf\n",i,a);
 
    }
 
    printf("Count of negative numbers on interval from A1 to An = %u\n", countNeg);
    printf("Count of numbers(A1...An) on interval from 1 to 2 = %u", countInterv);
    return 0;
}

Как работает эта строчка кода:

a = ((double)rand() / (double)RAND_MAX * (rand() % MAX_a + 1)) * (-1.0);

Ответы (1 шт):

Автор решения: DmitryK

rand() / RAND_MAX - выдает случайное число от 0 до 1 - [0,1] или (1/x)
rand() % MAX_a - это случайное число от 0 до MAX_a - 1
rand() % MAX_a + 1 - это случайное число от 1 до MAX_a - [1,MAX_a]
Дальше [1,MAX_a] умножается на (1/x) и результат делается отрицательным путем умножения на -1.

→ Ссылка