Гистограмма HDR: минимальное значение не совпадает с максимальным на 1 выборке
Я использую Java реализацию HDR гистограммы:
<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
?
1 ответ
Гистограммы Hdr устанавливаются с минимально настраиваемой точностью (например, 2 десятичных знака, или 3, или...). В качестве структуры данных он использует логически экспоненциальные сегменты с линейными вложенными сегментами в каждом, чтобы поддерживать требуемую точность во всем динамическом диапазоне, все в пределах структуры данных фиксированного размера (для данного динамического диапазона и уровня точности). Таким образом, любое записанное целочисленное значение в гистограмме неотличимо от любого другого значения в диапазоне lowerEquivalentValue(значение).. наибольший эквивалент значения (значение).
HdrHistogram тщательно избегает предоставления каких-либо результатов "в пределах" диапазона. При запросе минимума он всегда будет отвечать значением, эквивалентным наименьшему записанному значению. Когда запрашивается максимум, он всегда отвечает значением, эквивалентным максимальному записанному значению. Эти ответы явно находятся в пределах прецизионного контракта, и в противном случае это приведет к "слегка удивительным" действиям, таким как итерация после минимума или максимума или получение ответов на запросы (для среднего, процентилей и т. Д.), Которые находятся за пределами отчетного мин..макс диапазон.
НТН.
После некоторого разговора о гистограмме HDR GitHub, я думаю, что одной из причин может быть обеспечение того, чтобы минимум соответствовал результатам итерации по сегментам.