Из того, что я могу сказать из вашего кода - есть ряд проблем:
int count,i,binnumber,*histo,tempmax,tempmin;
float *data,y,temp,binwidth;
tempmin = floor(temp);
binnumber = ceil(sqrt((count-1)));
//out_stream << binnumber << endl;
binwidth = abs(tempmax-tempmin);
binwidth = binwidth/binnumber;
1) Вы используете temp, tempmax, подсчитываете все, не назначая их в первую очередь. Это означает, что в них будет какое-то случайное значение (какое бы значение не было уже в памяти, где была размещена каждая переменная). Чем они должны быть? Вы пропустили код между ними? Если count меньше единицы, вам также придется использовать какие-то мнимые числа в вашей программе, потому что sqrt ((count - 1)), а также binnumber будут случайными (если программа не останавливается, потому что эта базовая функция cmath sqrt не работает с мнимыми числами)
2) В качестве значения tempmin устанавливается уровень temp, даже если для temp не установлено ничего, поэтому tempmin также будет случайным.
3) binwidth устанавливается на абсолютное значение tempmax - tempmin, оба из которых имеют случайные значения, поэтому binwidth также будет иметь некоторое случайное значение.
4) если вы дойдете до линии, где binwidth = binwidth / binnumber, поймите, что, поскольку вы используете все целые числа для деления, вы вернете int (в основном, остаток будет отброшен), поэтому вам потребуется бросьте одну сторону, как это:
binwidth = (float) binwidth / binnumber, или binwidth = bindwidth / (float) binnumber, или binwidth = (double) binwidth / binnumber, или bindwidth = binwidth / (double) binnumber.
Плюс - конечно, если binnumber равен 0 (и он может быть здесь, потому что он случайный, вы можете получить сбой), вы можете захотеть сделать что-то вроде этого:
if (binnumber) binwidth = (double) binwidth / binnumber; - или какое-то решение
if (binnumber) совпадает с if (binnumber! = 0), в C и C ++ все значения, отличные от 0, имеют значение true, а 0 - false.
Так что да, в основном у вас много проблем с вашим кодом, и я бы посоветовал вам убедиться, что вы не используете переменные в выражении или формуле, не присваивая их заранее, и попробуйте распечатать значение binnumber для различных ставит перед кодом до.
Подождите секунду, вы даже не распределили * данные, возможно сделать то, что вы сделали с данными, ваш компьютер будет часто позволять это до точки, пока длина не велика, есть ли большая недостающий кусок между вашим кодом? Где ваши переменные инициализируются?