Node.js Math.random()不起作用

3
我用蒙特卡洛模拟编写了一个估算圆周率的代码,但是我发现无论迭代次数多少,结果总是在2.0左右。我认为这可能是Math.random()函数不起作用了。
该代码运行在Mac OS Sierra上,使用的是Node v7.5.0版本。
有什么想法吗?
// Begin of code
iterations = 100000000;
in_circle = 0;


function find_pi(){
    for ( i = 0; i < iterations; i++ ){
        x = 1 - 2 * Math.random();
        y = 1 - 2 * Math.random();

        if ( (x^2 + y^2) < 1 ) 
            in_circle++;
    }

    console.log( "in_circle = ", in_circle );
    console.log( "iterations = ", iterations );
    console.log( "Estimated PI Value = ", 4 * in_circle / iterations );
}

var startTime = Date.now();
find_pi();
var endTime = Date.now();
console.log("\n===== Took us: " + (endTime - startTime) + " milliseconds");
1个回答

1

x^2 不是指数运算,它是 按位异或

要进行指数运算,请使用 x*xMath.pow(x,2) 或者 x**2。如果你这样做,你将正确地估计 π≈3.14:

// Begin of code
iterations = 100000;
in_circle = 0;


function find_pi(){
    for ( i = 0; i < iterations; i++ ){
        x = 1 - 2 * Math.random();
        y = 1 - 2 * Math.random();

        if ( (x*x + y*y) < 1 ) 
            in_circle++;
    }

    console.log( "in_circle = ", in_circle );
    console.log( "iterations = ", iterations );
    console.log( "Estimated PI Value = ", 4 * in_circle / iterations );
}

var startTime = Date.now();
find_pi();
var endTime = Date.now();
console.log("\n===== Took us: " + (endTime - startTime) + " milliseconds");


太好了!谢谢! - Patricio Albornoz Jara

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接