⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mathpi.htm

📁 “常见程式演算”主要收集一些常见的程式练习题目
💻 HTM
字号:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>



  
  
  
  <link rel="stylesheet" href="css/stdlayout.css" type="text/css">



  
  
  
  <link rel="stylesheet" href="css/print.css" type="text/css">



  
  
  
  <meta content="text/html; charset=gb2312" http-equiv="content-type">



  
  
  
  <title>蒙地卡罗法求 PI</title>
</head>


<body>



<h3><a href="http://caterpillar.onlyfun.net/GossipCN/index.html">From
Gossip@caterpillar</a></h3>



<h1><a href="AlgorithmGossip.htm">Algorithm Gossip: 蒙地卡罗法求 PI</a></h1>



<h2>&nbsp;说明</h2>
蒙地卡罗为摩洛哥王国之首都,该国位于法国与义大利国境,以赌博闻名。蒙地卡罗的基本原理为以乱数配合面积公式来进行解题,这种以机率来解题的方式带有赌博的意味,虽然在精确度上有所疑虑,但其解题的思考方向却是个值得学习的方式。<br>
<h2>解法</h2>
蒙地卡罗的解法适用于与面积有关的题目,例如求PI值或椭圆面积,这边介绍如何求PI值;假设有一个圆半径为1,所以四分之一圆面积就为PI,而包括此四分之一圆的正方形面积就为1,如下图所示: <br>



<div style="text-align: center;"><img style="width: 352px; height: 170px;" alt="蒙地卡罗" title="蒙地卡罗" src="images/mathPI-1.jpg"></div>
<br>
如果随意的在正方形中投射飞标(点)好了,则这些飞标(点)有些会落于四分之一圆内,假设所投射的飞标(点)有n点,在圆内的飞标(点)有c点,则依比例来算,就会得到上图中最后的公式。<br>
<br>
至于如何判断所产生的点落于圆内,很简单,令乱数产生X与Y两个数值,如果X^2+Y^2等于1就是落在圆内。 <br>
<h2> 实作</h2>

<ul>
  <li> C
  </li>
</ul>

<pre>#include &lt;stdio.h&gt; <br>#include &lt;stdlib.h&gt; <br>#include &lt;time.h&gt; <br><br>#define N 50000 <br><br>int main(void) { <br>    int i, sum = 0; <br>    double x, y; <br><br>    srand(time(NULL)); <br><br>    for(i = 1; i &lt; N; i++) { <br>        x = (double) rand() / RAND_MAX; <br>        y = (double) rand() / RAND_MAX; <br>        if((x * x + y * y) &lt; 1) <br>            sum++; <br>    } <br><br>    printf("PI = %f\n", (double) 4 * sum / N); <br><br>    return 0; <br>} <br></pre>

<br>

<ul>
  <li> Java
  </li>
</ul>

<pre>public class PI {<br>    public static void main(String[] args) {<br>        final int N = 50000;<br>        int sum = 0; <br><br>        for(int i = 1; i &lt; N; i++) { <br>            double x = Math.random(); <br>            double y = Math.random(); <br>            if((x * x + y * y) &lt; 1) <br>                sum++; <br>        } <br><br>        System.out.println("PI = " + (double) 4 * sum / N);  <br>    }<br>}</pre>
<br>
<br>



</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -