181{
182 static const size_t NPICKS = 1000000;
183 std::vector<uint64_t> offsets;
184
187
188 std::vector<int> chain_picks(offsets.size(), 0);
189 std::vector<int> output_picks(n_outs, 0);
190 for (int i = 0; i < NPICKS; )
191 {
193 if (o >= n_outs)
194 continue;
195 auto it = std::lower_bound(offsets.begin(), offsets.end(), o);
196 auto idx = std::distance(offsets.begin(), it);
198 ++chain_picks[idx];
199 ++output_picks[o];
200 ++i;
201 }
202
203
204 std::vector<int> chain_norm(100, 0), output_norm(100, 0);
205 for (size_t i = 0; i < output_picks.size(); ++i)
206 output_norm[i * 100 / output_picks.size()] += output_picks[i];
207 for (size_t i = 0; i < chain_picks.size(); ++i)
208 chain_norm[i * 100 / chain_picks.size()] += chain_picks[i];
209
210 double max_dev = 0.0, avg_dev = 0.0;
211 for (size_t i = 0; i < 100; ++i)
212 {
213 const double diff = (double)output_norm[i] - (double)chain_norm[i];
214 double dev = fabs(2.0 * diff / (output_norm[i] + chain_norm[i]));
216 avg_dev += dev;
217 }
218 avg_dev /= 100;
219 MDEBUG(
"avg_dev: " << avg_dev);
221}