Implement Commons RNG-like samplers in kmath-prob module for Multiplatform #164
@ -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 }
|
||||
}
|
||||
|
@ -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)))
|
||||
|
Loading…
Reference in New Issue
Block a user