• 随机数生成器


    public class Random {
    	private    static    final   int    A=48271;
    	private    static    final   int   M=2147483647;
    	private    static    final   int   Q=M/A;
    	private   static    final    int    R=M%A;
    	
    public   Random()
    {
        this((int)(System.currentTimeMillis()%Integer.MAX_VALUE));
    }
    /*CONSTRUCT   this b  Random   object    with   specified   inital   state
     * */
    public  Random(int   initialValue)
    {
    	if(initialValue<0)
    		initialValue+=M;
    	state=initialValue;
    	if(state==0)
               state=1;
    }
    public   int  nextInt()
    {
    	int  tmpState=A*(state%Q)-R*(state/Q);
    	if(tmpState>=0)
    		state=tmpState;
    	else
    		state=tmpState+M;
    	return  state;
    }
    
    
    public int nextIntWRONG( )
    {
        return state = ( A * state ) % M;
    }
    
    public   double    nextDouble()
    {
    	 return (double)nextInt( )/ M;
    }
    
    public long nextLong( )
    {
        return  ( (long) nextInt( ) << 31 ) + nextInt( );
    }
    
    public    int  nextInt(int  low,int high)
    {
    	double partitionSize = (double) M / ( high - low + 1 );
    
        return (int) ( nextInt( ) / partitionSize ) + low;
    }
    public   int nextPoissson(double   excepctedValue)  //服从泊松分布的随机数的产生
    {
    	double    limit=-excepctedValue;
    	double   product  =Math.log(nextDouble());
    	int  count;
    	for(count=0;product>limit;count++)
           product+=Math.log(nextDouble());
         return  count;
    }
    public  double    nextNegExp(double   exceptedValue)      //服从负指数分布的随机数的产生,负指数=分布具有相同的均值和方差,用于刻画随机事件发生的时间间隔
    {
       return  -exceptedValue*Math.log(nextDouble());
       
    }
    public static final <AnyType> void permute( AnyType [ ] a )
    {
        Random r = new Random( );
    
        for( int j = 1; j < a.length; j++ )
            swapReferences( a, j, r.nextInt( 0, j ) );
    }
    
    private static final <AnyType> void swapReferences( AnyType [ ] a, int index1, int index2 )
    {
        AnyType tmp = a[ index1 ];
        a[ index1 ] = a[ index2 ];
        a[ index2 ] = tmp;
    }
    private  int state;
    // Test program
    public static void main( String [ ] args )
    {
        Random r = new Random( );
    
        for( int i = 0; i < 20; i++ )
            System.out.println( r.nextInt( ) );
            
        int [ ] dist = new int[ 10000 ];
        
        final int SAMPLES = 1000000;
        for( int i = 0; i < SAMPLES; i++ )
            dist[ r.nextPoissson( 2 ) ]++;
        for( int i = 0; i < 10; i++ )
            System.out.println( i + ": " +  dist[ i ] / (double) SAMPLES );    
    }
    }
    

      

  • 相关阅读:
    Windows照片查看器全屏浏览查看
    Windows调出软键盘
    IE叉事件
    对gridview的小改动
    gridview小把戏
    安全认证(转)
    用数组的方式实现DataTable中的distinct(转)
    TreeView的简单应用
    禁止按钮重复提交
    配置Microsoft Visual SourceSafe 2005的Internet访问(转)
  • 原文地址:https://www.cnblogs.com/fanerna/p/5410682.html
Copyright © 2020-2023  润新知