validate k-size of a tdigest
| 108 | |
| 109 | // validate k-size of a tdigest |
| 110 | Status Validate(const std::vector<Centroid>& tdigest, double total_weight) const { |
| 111 | double q_prev = 0, k_prev = this->K(0); |
| 112 | for (size_t i = 0; i < tdigest.size(); ++i) { |
| 113 | const double q = q_prev + tdigest[i].weight / total_weight; |
| 114 | const double k = this->K(q); |
| 115 | if (tdigest[i].weight != 1 && (k - k_prev) > 1.001) { |
| 116 | return Status::Invalid("oversized centroid: ", k - k_prev); |
| 117 | } |
| 118 | k_prev = k; |
| 119 | q_prev = q; |
| 120 | } |
| 121 | return Status::OK(); |
| 122 | } |
| 123 | |
| 124 | private: |
| 125 | double total_weight_; // total weight of this tdigest |