# Interface Quantiler

All Known Implementing Classes:
  `GKQuantiler, SortQuantiler`

public interface Quantiler
Calculates quantile values given a sequence of data samples.

Data must be submitted before quantiles are calculated. The sequence is as follows:

1. Make zero or more calls to `acceptDatum(double)` and `addQuantiler(Quantiler)`
2. Make one or more calls to `ready()`
3. Make zero or more calls to `getValueAtQuantile(double)`

Doing it out of sequence leads to undefined behaviour.

Since:
  3 Dec 2020
Author:
  Mark Taylor

## Method Summary

Modifier and Type
Method
Description
`void`
`acceptDatum(double value)`
Accepts a value to accumulate for quantile calculations.
`void`
`addQuantiler(Quantiler other)`
Merges the state of another compatible accumulator into this one; the effect is as if all the `acceptDatum(double)` calls that were made on `other` had been made on this one.
`double`
`getValueAtQuantile(double quantile)`
Returns the value at a given quantile.
`void`
`ready()`
Call after all data has been accumulated and before quantiles are to be calculated.

## Method Details

### acceptDatum

void acceptDatum(double value)
Accepts a value to accumulate for quantile calculations. NaN values are ignored.

Parameters:
  `value` - value to accumulate

### addQuantiler

void addQuantiler(Quantiler other)
Merges the state of another compatible accumulator into this one; the effect is as if all the `acceptDatum(double)` calls that were made on `other` had been made on this one.

Parameters:
  `other` - compatible quantiler to merge with this

### ready

void ready()
Call after all data has been accumulated and before quantiles are to be calculated.

### getValueAtQuantile

double getValueAtQuantile(double quantile)
Returns the value at a given quantile.

Parameters:
  `quantile` - value in the range 0..1
Returns:
  value at quantile, or NaN if no data