我正在使用HDR直方图的Java实现:
<dependency>
<groupId>org.hdrhistogram</groupId>
<version>2.1.4</version>
<artifactId>HdrHistogram</artifactId>
</dependency>我认为,即使样本数为1时,最小值和最大值也是不同的:
@Test
public void testHistogram() throws Exception {
Histogram stats = new Histogram(2);
stats.recordValue(35071);
assertEquals(1, stats.getTotalCount());
assertEquals(35071, stats.getMaxValue());
assertEquals(35071, stats.getMinNonZeroValue()); // Fails:
// java.lang.AssertionError:
// Expected :35071
// Actual :34816
}我在直方图代码中看到了以下片段:
public long getMinNonZeroValue() {
return (minNonZeroValue == Long.MAX_VALUE) ?
Long.MAX_VALUE : lowestEquivalentValue(minNonZeroValue);
}(在GitHub中)
我的问题是:为什么我们不能简单地返回记录的minNonZeroValue呢?
发布于 2019-01-02 07:51:34
HdrHistograms的设置具有最小的可配置精度(例如小数点2,或3,或.)。作为一种数据结构,它使用逻辑上的指数桶和每个线性子桶,在整个动态范围内保持所需的精度,所有这些都在一个固定大小的数据结构内(对于给定的动态范围和精度级别)。因此,直方图中任何记录的整数值都无法与范围lowestEquivalentValue(值)中的任何其他值区别开来。highestEquivalentValue(值)
HdrHistogram小心地避免在“范围内”提供任何结果。当被问到最小值时,它总是用一个相当于最低记录值的值来响应。当被问到最大值时,它总是用一个相当于最高记录值的值来响应。这些答案显然在精确契约中,否则会导致“微妙地令人惊讶”的行为,例如迭代超过最小值或最大值,或者获得查询答案(对于平均值、百分位数等等)。在报告的min..max范围之外。
HTH。
发布于 2016-06-22 13:32:41
在HDR直方图上的一些对话之后,我认为一个原因可能是确保最小值与桶上的迭代结果相匹配。
https://stackoverflow.com/questions/37950683
复制相似问题