Skip to content

B-digest is a Go library for fast and memory-efficient estimation of quantiles with guaranteed relative error and full mergeability

License

Notifications You must be signed in to change notification settings

flyingmutant/bdigest

Folders and files

NameName
Last commit message
Last commit date

Latest commit

d7c95c2 · Dec 30, 2022

History

40 Commits
Dec 30, 2022
May 1, 2020
May 1, 2020
May 1, 2020
May 1, 2020
May 1, 2020
Aug 14, 2020
May 27, 2020
May 27, 2020
Dec 30, 2022
Aug 14, 2020
Dec 30, 2022
Dec 30, 2022

Repository files navigation

b-digest PkgGoDev CI

B-digest is a Go library for fast and memory-efficient estimation of quantiles with guaranteed relative error and full mergeability.

package bdigest_test

import (
	"fmt"
	"math"
	"math/rand"

	"pgregory.net/bdigest"
)

func ExampleNewDigest() {
	r := rand.New(rand.NewSource(0))
	d := bdigest.NewDigest(0.05)

	for i := 0; i < 100000; i++ {
		v := math.Exp(r.NormFloat64())
		d.Add(v)
	}

	fmt.Printf("%v buckets\n", d.Size())
	for _, q := range []float64{0, 0.1, 0.25, 0.5, 0.75, 0.9, 0.95, 0.99, 0.999, 0.9999, 1} {
		fmt.Printf("%v\tq%v\n", d.Quantile(q), q)
	}

	// Output:
	// 98 buckets
	// 0.015690260723105844	q0
	// 0.2858480802952493	q0.1
	// 0.5211100423907477	q0.25
	// 1.05	q0.5
	// 1.9141830301785612	q0.75
	// 3.489615879070075	q0.9
	// 5.2076333497857386	q0.95
	// 10.493014090054524	q0.99
	// 21.142683691165157	q0.999
	// 42.601017193748824	q0.9999
	// 258.10858921508054	q1
}

License

B-digest is licensed under the Apache License Version 2.0.

About

B-digest is a Go library for fast and memory-efficient estimation of quantiles with guaranteed relative error and full mergeability

Topics

Resources

License

Stars

Watchers

Forks

Languages