蒙特卡罗近似y = 2 ^( - 0.5)x的积分从0到1布尔值不能正常工作

时间:2017-02-27 21:40:40

标签: java math boolean do-while montecarlo

Professor's equation for the boolean condition that satisfies "hitPointsCounter" in my code

在Java类中,我的任务是解决几何区域的几个蒙特卡罗近似。我的第一个实验我有一个名为"条件"的布尔值。 (运行一个满足的do-while循环)(错误< tolerance) - 截至目前,当我运行程序时,这似乎产生了一个无限循环。

当我改变我的"而#34;从布尔值到计数器的语句我可以让它正常运行,所以我知道布尔本身存在问题。

我教授给我增加hitPointsCounter变量的条件如果我被要求从0到1求解高度为2 ^( - 0.5)的正方形区域,那么效果会很好,但不能用等式y = 2 ^( - 0.5)x - 所以我即兴发现并注意到,对于一个点在线上或线下,它必须满足x / y> = 2 ^ 0.5。

有人可以给我一些反馈,告诉我可能搞砸了吗?我的问题介于交换机案例1:和中断之间。

width: 23px

1 个答案:

答案 0 :(得分:0)

所以我让代码工作,问题是双重的 - 我的代码没有重新评估布尔条件'在循环内导致无限循环,我之前定义的hitPointCounter的方式并不正确。谢谢Damon的帮助。当我添加这个块时:

           percentHit =   (((double)hitPointsCounter/(double)totalPointsCounter));
           approximateArea =(percentHit)*(referenceArea);
           error = Math.abs(exactArea - approximateArea);
           condition = error > tolerance;

在我的循环中并更改了

     if (y==0 && x==0){hitPointsCounter++;}
     if (y>0){
     if ((x/y)>=Math.pow(2, 0.5)){

            hitPointsCounter++;}
    }

到:

if (y<(Math.pow(2,-0.5)*x)){

                hitPointsCounter++;}

代码就像一个魅力。