code: float splat(DHistogram hs[]) {
        DHistogram h = hs[_col];
        assert _bin > 0 && _bin < h.nbins();
        assert _bs==null : "Dividing point is a bitset, not a bin#, so dont call splat() as result is meaningless";
        if (_nasplit == DHistogram.NASplitDir.NAvsREST) return -1;
        assert _equal != 1;
        assert _equal==0; // not here for bitset splits, just range splits
        // Find highest non-empty bin below the split
        int x=_bin-1;
        while( x >= 0 && h.bins(x)==0 ) x--;
        // Find lowest  non-empty bin above the split
        int n=_bin;
        while( n < h.nbins() && h.bins(n)==0 ) n++;
        // Lo is the high-side of the low non-empty bin, rounded to int for int columns
        // Hi is the low -side of the hi  non-empty bin, rounded to int for int columns
  
        // Example: Suppose there are no empty bins, and we are splitting an
        // integer column at 48.4 (more than nbins, so step != 1.0, perhaps
        // step==1.8).  The next lowest non-empty bin is from 46.6 to 48.4, and
        // we set lo=48.4.  The next highest non-empty bin is from 48.4 to 50.2
        // and we set hi=48.4.  Since this is an integer column, we round lo to
        // 48 (largest integer below the split) and hi to 49 (smallest integer
        // above the split).  Finally we average them, and split at 48.5.
        double lo = h.binAt(x+1);
        double hi = h.binAt(n  );
        if( h._isInt > 0 ) lo = h._step==1 ? lo-1 : Math.floor(lo);
        if( h._isInt > 0 ) hi = h._step==1 ? hi   : Math.ceil (hi);
        return (float)((lo+hi)/2.0);
      }
docs: elements.