summaryrefslogtreecommitdiff
path: root/diffpriv.go
diff options
context:
space:
mode:
Diffstat (limited to 'diffpriv.go')
-rw-r--r--diffpriv.go23
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
}