PasteRack.org
Paste # 46032
2018-07-13 08:35:41

Forked from paste # 86500.

Fork as a new paste.

Paste viewed 1528 times.


Embed:

draw-from-gauss-#2

  1. #lang racket
  2.  
  3. ; Number Number -> Number
  4. ; x sigma -> Gaussian
  5. ; Gaussian (x, s) := 1/sqrt(2 pi s^2) * exp(- x^2/(2 s^2))
  6. (define (gauss x sigma)
  7.   (*
  8.    (/ 1 [* sigma (sqrt [* 2 pi])])
  9.    (exp [- sqr (/ x [* (sqrt 2) sigma])]))
  10.   )
  11.  
  12.  
  13. ; Number Number -> Number
  14. ; return a^b, but imprecise
  15. ; use `expt` instead of `~^`: (expt 3.4 1.5)
  16. ; see: <tiny.cc/r5bjvy>
  17.  
  18.  
  19. ; for local constants, use `let` <tiny.cc/28bjvy>
  20. ;!== PSEUDO-CODE ==!
  21. ; Number -> Number
  22. (define (rand.gauss n)
  23.   (let [c (random a b)]
  24.     ;--IN--
  25.     (if (>= [gauss c] [random 0 (max gauss)])
  26.         c
  27.         ; else
  28.         rand.gauss n)
  29.     )
  30.   )

=>

eval:3:0: let: bad syntax (not an identifier and expression

for a binding)

  at: c

  in: (let (c (random a b)) (if (>= (gauss c) (random 0 (max

gauss))) c rand.gauss n))