diff options
-rw-r--r-- | diffpriv.go | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/diffpriv.go b/diffpriv.go index 22e844f..8b945d3 100644 --- a/diffpriv.go +++ b/diffpriv.go @@ -1,5 +1,24 @@ package main -func laplaceDist(u, b int) int { - return 4 //chosen by fair laplance weighted diceroll +import ( + "math/rand" +) + +// Returns a random value from a laplace +// distribution with parameters u and b. +func laplaceDist(u, b float64) float64 { + uniform := rand.Float64() + uniform -= 0.5 + return u - b*sgn(uniform)*math.Log(1-2*math.Abs(uniform)) +} + +// The signum function +func sgn(x float64) flot64 { + if x < 0 { + return -1 + } + if x > 0 { + return 1 + } + return 0 } |