@@ -558,20 +558,24 @@ TEST_CASE("quantile", "[ddsketch]") {
558558 DDSketch<CollapsingLowestDenseStore<8 , A>, LinearlyInterpolatedMapping> sk (0.01 );
559559 std::random_device rd{};
560560 std::mt19937_64 gen{rd ()};
561- std::normal_distribution<double > d (0.0 , 1.0 );
561+ // std::normal_distribution<double> d(0.0, 1.0);
562+ std::exponential_distribution<double > d (1.5 );
563+ int sample_size = 10000000 ;
562564
563565 std::vector<double > values;
564566
565567 tdigest<double , A> td (100 );
566- DDSketch<CollapsingHighestDenseStore< 1024 , A>, LogarithmicMapping> ddsketch (0.01 );
568+ DDSketch<CollapsingLowestDenseStore< 4096 , A>, LogarithmicMapping> ddsketch (0.001 );
567569 DDSketch<SparseStore<A>, LogarithmicMapping> sparse_sk (0.01 );
568- for (size_t i = 0 ; i < 10000000 ; ++i) {
570+ for (size_t i = 0 ; i < sample_size ; ++i) {
569571 double val = d (gen);
572+ values.push_back (val);
570573 ddsketch.update (val);
571574 sparse_sk.update (val);
572575 td.update (val);
573576 }
574577
578+ std::sort (values.begin (), values.end ());
575579
576580
577581 std::cout << ddsketch.to_string ();
@@ -582,7 +586,11 @@ TEST_CASE("quantile", "[ddsketch]") {
582586
583587 std::cout << std::setprecision (20 ) << std::fixed;
584588 for (double q = 0.0 ; q <= 1.00 ; q += 0.01 ) {
585- std::cout << std::setw (4 ) << q << " " << std::setw (15 ) << ddsketch.get_quantile (q) << " " << std::setw (15 ) << sparse_sk.get_quantile (q) << " " << std::setw (15 ) << td.get_quantile (q) << " " << std::endl;
589+ const double true_q = values[(sample_size-1 ) * q];
590+ const double ddsketch_est = std::abs (true_q - ddsketch.get_quantile (q)) / true_q;
591+ const double tdigest_est = std::abs (true_q - td.get_quantile (q)) / true_q;
592+ std::cout << q << " " << ddsketch_est << " " << tdigest_est << std::endl;
593+ // std::cout << std::setw(4) << q << " " << values[(sample_size-1) * q] << " " << std::setw(15) << ddsketch.get_quantile(q) << " " << std::setw(15) << sparse_sk.get_quantile(q) << " " << std::setw(15) << td.get_quantile(q) << " " << std::endl;
586594 }
587595}
588596} /* namespace datasketches */
0 commit comments