Я хочу сгенерировать случайное число, принадлежащее экспоненциальному распределению. я написал это
int size = atoi(argv[2]);
double *values = (double*)malloc(sizeof(double)*size);
double gamma = atof(argv[1]);
if(gamma<=0.0){
cout<<"Insert gamma"<<endl;
return 0;
}
for(int i=0; i<size; i++){
values[i]=0;
}
srand ( time(NULL) );
for(int i=0; i<size; i++){
x = ((double) rand() / (RAND_MAX));
//cout << random <<endl;
value=(log(1.0-x)/(-gamma));
//count each value
values[value]=values[value]+1.0;
}
Но они не покрывают весь размер вектора. Более или менее они покрывают 10% вектора, все остальные поля равны 0, и из-за того, что после того, как мне нужно выполнить линейную интерполяцию, я хочу уменьшить эти «пустые места», чтобы иметь хотя бы одно значение для каждого ячейка массива, как мне это сделать? например, у меня есть вектор 100000, только первые 60 полей заполнены значениями, поэтому все ячейки от 60 до 999999 равны 0, и когда я выполняю линейную регрессию, они отрицательно влияют на формулу.
gamma
вы использовали? - person Severin Pappadeux   schedule 30.03.2015gamma=1
quick на обратной стороне конверта calc показывает, что у вас будет менее 700 ячеек, заполненных двойным представлением (наименьшее двойное значение составляет около 10 ^ -308) - person Severin Pappadeux   schedule 30.03.2015value >= size
это не запись в недопустимый адрес памяти. Почему это массивdouble
вместо массиваint
? Почему вы решили не использоватьstd::vector
? (если это даже не пришло вам в голову, вам действительно следует привыкнуть думать об использованииstd::vector
в качестве решения по умолчанию для динамически выделяемых массивов) - person   schedule 30.03.2015