Skip to contents

The split is by MAGNITUDE RANK, not an absolute threshold, so the outlier count is exactly ceiling(frac * d) regardless of scale. Ties break on the lower index. The average bit-width comes out non-integer, which is the point of the construction.

Usage

Outsplit(x, b_out = 8, b_in = 2, frac = 0.01)

Arguments

x

The vector whose channels are split.

b_out

Bits per outlier coordinate.

b_in

Bits per non-outlier coordinate.

frac

Fraction of coordinates treated as outliers, in (0, 1).

Value

List with outlier_index, n_outlier, effective_bits, outlier_energy, threshold, d.

Details

Formula: O = the ceiling(frac d) coordinates of largest |x_j|; effective bits = (|O| b_out + (d - |O|) b_in) / d

References

Zandieh et al., arXiv:2504.19874, on splitting channels into outlier and non-outlier sets and applying two independent TurboQuant instances with higher precision for outliers. The paper does not fix the split RULE; magnitude-rank selection is used here and documented as such.

Examples

V <- c(1, 2, 3, 4, 5, 6, 7, 8)
Outsplit(V)
#> $outlier_index
#> [1] 8
#> 
#> $n_outlier
#> [1] 1
#> 
#> $effective_bits
#> [1] 2.75
#> 
#> $outlier_energy
#> [1] 0.3137255
#> 
#> $threshold
#> [1] 8
#> 
#> $d
#> [1] 8
#> 
#> $method
#> [1] "Outlier channel split with per-set bit allocation"
#> 
#> attr(,"class")
#> [1] "morie_rich_result" "list"