I think, here is a bug concerning values below the lower limit.

As an example: assume `axis_p_range.first = -1.0` and `axis_p_range.second = +1.0`.
If `mom_i = -1.001`, `rel_bin = -0.0005` and `rel_bin * float_X(p_bins) = -0.512`.
The cast to `int` will in contrast to `floor()` result in `p_bin = 0`. 

By using cast to `int`, the momentum in a small range below the lower limit contributs to the lowest bin.