jeudi 4 juin 2020

C script that randomly adds to bins is producing negatives and other odd numbers

My function which just randomly adds to bins is producing some numbers that make no sense such as negatives, huge numbers, or nothing is being added. I am confused because I add by 1 and within a controlled for loop.

#include <stdio.h>

#include <stdlib.h>

double seed;
int bins, i, r, j, a, index;
long samples;
int main(void) {
    puts("seed?");
    if (scanf("%lf", & seed) != 1) {
        puts("bad input");
        return 0;
    }
    puts("how many samples?");
    if (scanf("%ld", & samples) != 1 || samples <= 0) {
        puts("bad input");
        return 0;
    }
    puts("how many bins?");
    if (scanf("%d", & bins) != 1 || bins <= 0) {
        puts("bad input");
        return 0;
    }
    int arr1[bins];
    int arr2[bins];
    int rarr[bins];
    srand(seed);
    for (i = 0; i < bins; i++) {
        rarr[i] = (((i + 1) / bins) * RAND_MAX);
    }
    for (i = 0; i < samples; i++) {
        r = rand();
        index = r % bins;
        arr1[index] += 1;
        for (j = 0; j < samples; j++) {
            if (r < rarr[j]) {
                index = j;
                break;
            }
        }
        arr2[index] += 1;
    }
    puts("counts using remainder method:");
    for (i = 0; i < bins; i++) {
        printf("(%d) %d\n", i, arr1[i]);
    }
    puts("counts using quotient method:");
    for (i = 0; i < bins; i++) {
        printf("(%d) %d\n", i, arr2[i]);
    }
    return 0;
}



Aucun commentaire:

Enregistrer un commentaire