#!/usr/bin/env ruby # -*- encoding: utf-8 -*- # Copyright Steffi Dorn , 2018 # License: GNU APGLv3 (or later) module Math class << self def harmonic n (1..n).reduce(0.0){|s, i| s + (1.0 / i)} end def zipf k, n 1.0 / (k.to_f * harmonic(n)) end def tolerance total θ = total / Math.log(total) θ > total ? total : θ.round end alias :tolerate :tolerance alias :θ :tolerance # TODO meh iterative solution def sufficiency exceptions n = 1 n += 1 while θ(n) < exceptions n end alias :sufficient :sufficiency end end