Я учусь использовать случайную функцию (srand и rand) для запуска симуляции броска костей.Программа работает очень хорошо;Я бросаю кубик 200 раз и помещаю каждый результат в массив ветеринара.
Однако, проанализировав расчет остальной части модуля, я понял, что он вычислен неправильно.Например:
1131946436 % 6 = 2
(вычисляется вручную и с помощью Python и с калькулятором).
модуль рассчитывается следующим образом:
1131946436 / 6 = (int) 188657739
188657739 * 6 = 1131946434
1131946436 - 1131946434 = 2
, а C даетмне 3.
Тем не менее программа работает правильно.Я думал, что это проблема переполнения int, но если вы посмотрите на результаты rand (), мы всегда под 2147483647 (предел подписи int на моем 64-битном компьютере).
Я не могу понять, почему C не делаетне правильно рассчитать модуль и, несмотря на это, программа работает правильно.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_SHOTS 200
#define MAX_NUMBERS 6
int main(void) {
int a;
int vettore[MAX_SHOTS] = {0};
srand((unsigned) time(NULL));
for (int i = 0; i < MAX_SHOTS; ++i) {
a = rand() % MAX_NUMBERS;
vettore[i] = a;
printf("vettore[%d] = %d - %d\n", i, a, rand());
}
printf("Tiro di un dado: su %d tiri è uscito:\n", MAX_SHOTS);
for (int j = 0; j < MAX_NUMBERS; ++j) {
printf("%d)\t", j + 1);
int num = 0;
for (int i = 0; i < MAX_SHOTS; ++i) {
if (vettore[i] == j) {
++num;
printf("*");
}
}
printf(" (%d)\n", num);
}
return 0;
}