Preliminary to https://reviews.llvm.org/D81809
Why is the default mt19937 not fine ? (please add a comment)
Could we make H a provate typedef inside the class ? (It's not used outside, and I don;t see any specialization)
H looks unused.
Can you add some doc ?
Use kSampleSize instead of values.size() for more accurate results (the DoNotOptimize call above will likely force the compiler to recompute the size at every iteration).
Also it would be better to make kSampleSize a power of two and do: i = (i+1)%kSampleSize to avoid the branch altogether.
why not __uint128_t ?