Now I suspect that I am not getting proper ranges of bins through this macro(May be one reason could be size of x, which is 64). So in Coverage Report, I want to check, that all 3 bins has got which range of values.
The bins are set at the time of covergroup construction. That is the only time the value of the variable num_of_ns is read, and the bins will be uniformly distributed based on the value at construction. If you need bins for different ranges, you need to construct multiple covergroups. But there would be no way to merge these covergroups to get 100% coverage if you were to create a new covergroup instance for each sample.