Sha256: d44bd88fbaeff70afe68b4922c998f67a5aa0c89c58e40e204027515d6029135

Contents?: true

Size: 840 Bytes

Versions: 1

Compression:

Stored size: 840 Bytes

Contents

#!/usr/bin/env ruby
# -*- encoding: utf-8 -*-
# Copyright Steffi Dorn <mail@muflax.com>, 2018
# License: GNU APGLv3 (or later) <http://www.gnu.org/copyleft/gpl.html>

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

    def factorial n
      (2..n).reduce(1){|f, x| f * x}
    end

    def choose k, n
      Math.factorial(n) / (Math.factorial(k) * Math.factorial(n - k))
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
muflax-0.3.14 lib/muflax/math.rb