Home | Print | Q/A | Guest | NewsLetter
Display context of search results Case-sensitive searching
Database System
Data Warehouse
Data Analysis
Operating System
Open Source
Enterprise Architecture
Software Engineering
Process
Working Smart

SQL Server
PostgreSQL
Oracle
DB2
Teradata
MySQL
Performance Tuning
Programming

Link
Philosophy
Tools
Misc
주인놈
_
_
SideBar Edit

Contents

1 문제
2 T-SQL로 구현
3 참고자료


1 문제 #

반지름이 100인 원이 있다. 원에 십자가를 그어 1/4의 호를 만든다. (2사분면) 난수 2개(x,y)를 발생시켜 0점으로부터 호를 벗어나는지 벗어나지 않는지를 좌표를 찍는다. 이를 1000회 반복하여 대충의 원주율을 구한다. 이를 100회 시행하여 그 평균을 구해보자. 거의 원주율(3.14)에 가까울 것이다.

2 T-SQL로 구현 #

SET NOCOUNT ON
SET STATISTICS io OFF
 
DECLARE 
	@rs FLOAT
,	@i INT
,	@j INT
,	@t FLOAT
,	@r FLOAT;

DROP TABLE #Temp
CREATE TABLE #Temp(PI float);
 
SET @r = 100; --반지름
SET @rs = 0;
 
SET @i = 1;
SET @j = 1;

BEGIN TRAN
	WHILE(@i <= 100)
	BEGIN
		WHILE(@j <= 10000)
		BEGIN
			SET @t = CONVERT(DECIMAL(18,2), RAND()) * CONVERT(DECIMAL(18,2), RAND()) * 10000
		 
			IF @t <= (PI() * POWER(@r, 2) / 4)
				SET @rs = @rs + (@t/4)
		 
			SET @j = @j + 1
		END
		INSERT #Temp VALUES(POWER(@rs, -2))
		SET @i = @i + 1
	END
COMMIT;
SELECT AVG([PI]) FROM #Temp
/*
몇 번 실행해 보면 원주율이 2후반 ~ 3초반 인 것을 알 수 있다. 
불확실성을 이용한 확률..
*/


EditText|Print|FindPage|DeletePage|LikePages|http://www.databaser.net|last modified 2010-03-08 17:35:31