2
0
Эх сурвалжийг харах

add thread-safe version of random.Gaussian()

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@7290 8c9fc860-2736-0410-a75d-ab315db34111
eth.hunzikerp 8 жил өмнө
parent
commit
1aeb3e86cf
1 өөрчлөгдсөн 17 нэмэгдсэн , 1 устгасан
  1. 17 1
      source/Random.Mod

+ 17 - 1
source/Random.Mod

@@ -98,7 +98,7 @@ TYPE
 		
 		PROCEDURE Gaussian*(): REAL; (*generates a normal distribution with mean 0, variance 1 using the Box-Muller Transform*)
 		VAR
-			x1,x2,w,y1,y2: REAL;
+			x1,x2,w,y1: REAL;
 		BEGIN
 			REPEAT
 				x1:=2.0*Uniform()-1;
@@ -147,6 +147,22 @@ TYPE
 		BEGIN {EXCLUSIVE}
 			RETURN r.Exp(mu)
 		END Exp;
+		
+		PROCEDURE Gaussian*(): REAL; (*generates a normal distribution with mean 0, variance 1 using the Box-Muller Transform*)
+		VAR
+			x1,x2,w,y1: REAL;
+		BEGIN {EXCLUSIVE}
+			REPEAT
+				x1:=2.0*Uniform()-1;
+				x2:=2.0*Uniform()-1;
+				w:=x1*x1+x2*x2;
+			UNTIL w<1;
+			w:=Math.sqrt( (-2.0* Math.ln(w) ) /w);
+			y1:=x1*w;
+			(*y2:=x2*w*)
+			RETURN y1;
+		END Gaussian;
+
 
 	END Sequence;