浏览代码

added gaussian distributed random numbers

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@7125 8c9fc860-2736-0410-a75d-ab315db34111
skoster 8 年之前
父节点
当前提交
6f7bfc75e5
共有 1 个文件被更改,包括 15 次插入0 次删除
  1. 15 0
      source/Random.Mod

+ 15 - 0
source/Random.Mod

@@ -95,6 +95,21 @@ TYPE
 		BEGIN
 		BEGIN
 			RETURN -Math.ln(Uniform())/mu
 			RETURN -Math.ln(Uniform())/mu
 		END Exp;
 		END Exp;
+		
+		PROCEDURE Gaussian*(): REAL; (*generates a normal distribution with mean 0, variance 1 using the Box-Muller Transform*)
+		VAR
+			x1,x2,w,y1,y2: REAL;
+		BEGIN
+			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 Generator;
 	END Generator;