Какой ячейке гистограммы gsl_histogram присвоено значение, которое находится точно на границе между двумя ячейками?
Например. когда я звоню gsl_histogram_increment( h, x)
с x равным 0, а ребра ячеек -0.2, 0, 0.2, 0.4 и т. д., получу ли я приращение положительного диапазона (0, 0.2) или отрицательного диапазона (-0.2, 0)?
РЕДАКТИРОВАТЬ: да мои диапазоны одинаковы.
если ваше распределение бина является линейным (как в вашем примере), то это код, который выполняется (взят из gsl-1.15 / histogram / find.c):
/* optimize for linear case */
#ifdef LINEAR_OPT
{
double u = (x - range[0]) / (range[n] - range[0]);
i_linear = (size_t) (u * n);
}
if (x >= range[i_linear] && x < range[i_linear + 1])
{
*i = i_linear;
return 0;
}
#endif
обратите внимание на> = для нижнего края бункера и < для верхнего края бина, поэтому ваше значение 0.0 должно упасть в 0.0 — 0.2 бина
для нелинейного распределения бинов выполняется двоичный поиск, т.е.
/* perform binary search */
upper = n ;
lower = 0 ;
while (upper - lower > 1)
{
mid = (upper + lower) / 2 ;
if (x >= range[mid])
{
lower = mid ;
}
else
{
upper = mid ;
}
}
*i = lower ;
обратите внимание, что использование> = подразумевает, что значение, попадающее на край ячейки, будет включено в «верхнюю» ячейку двух (так же, как в линейном случае)
возможно, проверьте еще раз, запустив ваш пример и наблюдая, к какому бину добавляется значение
gsl_histogram_increment
кажется использовать состояние L <= x < U
для решения, стоит ли ставить стоимость x
в мусорном ведре (L, U)
, Так 0
в конечном итоге в (0, 0.2)
,