////////////////////////////////////////////////////////////////////////////////
// << j183b.java >>
//
// 基礎(8):円周率の近似
//
// 区間[0,1]の一様乱数の組(x,y)をn組生成し、x*x+y*y<=1を満たす組cを数えると、
// 4c/nが円周率の近似値となる。
//
////////////////////////////////////////////////////////////////////////////////
class j183b {
public static void main(String args[]) {
int n = 100000; // 乱数組の個数。
double x,y; // 区間[0,1]の一様乱数。
int c = 0; // 4分円内(x*x+y*y<=1)に入る乱数組の個数。
// 一様乱数を作成し出現頻度を数える。
for( int i=1; i<=n; i++ ) {
x = Math.random();
y = Math.random();
if( x*x+y*y <= 1.0 ) { c++; }
if( i%10000 == 0 ) {
System.out.println("i=" + i + " 円周率の近似値=" + 4.0*c/i);
}
}
}
}
実行結果
% javac j183b.java
% java j183b
i=10000 円周率の近似値=3.144
i=20000 円周率の近似値=3.1388
i=30000 円周率の近似値=3.1414666666666666
i=40000 円周率の近似値=3.1397
i=50000 円周率の近似値=3.14704
i=60000 円周率の近似値=3.1484666666666667
i=70000 円周率の近似値=3.1498285714285714
i=80000 円周率の近似値=3.14465
i=90000 円周率の近似値=3.142622222222222
i=100000 円周率の近似値=3.1452