fac7_2_2.java

来自「java 算法设计与分析的好资料.由王晓东先生主编.」· Java 代码 · 共 57 行

JAVA
57
字号
//本程序取自王晓东编著“算法分析与设计”第 245 页,例7_2_2
//用随机投点法计算定积分
 import java.lang.System;
  class Random
 {
   private long seed;//当前种子
   private final static long multiplier=0x5DEECE66DL;
   private final static long adder=0xBL;
   private final static long mask=(1L<<48)-1;
   //构造方法,自动产生种子
   public Random(){
     this.seed=System.currentTimeMillis();}
  //构造方法,缺省值0表示由系统自动产生种子
   public Random(long seed)
     {
       if(seed==0)this.seed=System.currentTimeMillis();
       else this.seed=seed;
     }
  //产生[0,n-1]之间的随机整数
   public int random(int n)
     {
      if(n<=0)
       throw new  IllegalArgumentException(" n must be positive");
      seed=(seed*multiplier+adder) & mask;
      return ((int)(seed>>>17)%n);
     }
  //产生[0,1]之间的随机实数
   public double fRandom()
     {
      return random(Integer.MAX_VALUE)/(double)(Integer.MAX_VALUE);
     } 
  }
  public class Fac7_2_2{
    public static double darts1(int n)
     {//用随机投点法计算定积分
        Random dart=new Random();
      int k=0;
      for(int i=1;i<=n;i++){
         double x=dart.fRandom();
	 double y=dart.fRandom();
	 if(y<=f(x))k++;
	  }
      return k/(double)n;
     }
	 public static double f(double x)
	  {//定义函数f(x)
	     return(Math.sin(x));
      }
 /** 应用程序   */
    public static void main(String args[])
     {
       int i=100000;      
          System.out.print("sin(x)积分近似值 ");
         System.out.println(darts1(i));
        
      }
  }   

⌨️ 快捷键说明

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