Implement Commons RNG-like samplers in kmath-prob module for Multiplatform #164

Merged
CommanderTvis merged 44 commits from feature/mp-samplers into dev 2021-03-31 09:25:44 +03:00
2 changed files with 9 additions and 1 deletions
Showing only changes of commit 55909aee0d - Show all commits

View File

@ -36,7 +36,7 @@ internal class ViktorBenchmark {
@Benchmark
fun rawViktor() {
val one = F64Array.full(init = 1.0, shape = *intArrayOf(dim, dim))
val one = F64Array.full(init = 1.0, shape = intArrayOf(dim, dim))
var res = one
repeat(n) { res = res + one }
}

View File

@ -5,9 +5,17 @@ import kscience.kmath.prob.RandomGenerator
import kscience.kmath.prob.UnivariateDistribution
import kscience.kmath.prob.internal.InternalErf
import kscience.kmath.prob.samplers.GaussianSampler
import kscience.kmath.prob.samplers.NormalizedGaussianSampler
import kscience.kmath.prob.samplers.ZigguratNormalizedGaussianSampler
import kotlin.math.*
public inline class NormalDistribution(public val sampler: GaussianSampler) : UnivariateDistribution<Double> {
public constructor(
mean: Double,
standardDeviation: Double,
normalized: NormalizedGaussianSampler = ZigguratNormalizedGaussianSampler.of(),
) : this(GaussianSampler.of(mean, standardDeviation, normalized))
public override fun probability(arg: Double): Double {
val x1 = (arg - sampler.mean) / sampler.standardDeviation
return exp(-0.5 * x1 * x1 - (ln(sampler.standardDeviation) + 0.5 * ln(2 * PI)))