using System;  
 
namespace MyRandom  
{  
    public class Rand  
    {  
        private long seed;  //随机数种子   
 
        //用系统时间作为随机种子   
        public Rand()  
        {  
            string str = DateTime.Now.Day.ToString();  
            str += DateTime.Now.Hour.ToString();  
            str += DateTime.Now.Minute.ToString();  
            str += DateTime.Now.Second.ToString();  
            str += DateTime.Now.Millisecond.ToString();  
            this.seed = long.Parse(str);  
        }  
        //用户自定义随机种子   
        public Rand(long Value)  
        {  
            this.seed = Value;  
        }  
 
        //产生非负伪随机数   
        public long Next()  
        {  
            long l = this.seed;  
            l = l * l;  
            string strTime = l.ToString();  
            int w = strTime.Length / 3;  
            string str = "";  
            for (int i = w; i < strTime.Length - w; i++)  
                str += strTime[i];  
            l = long.Parse(str);  
            return l;  
        }  
        //产生上限为Value的伪随机数   
        public long Next(long Value)  
        {  
            if (Value < 0)  
                return -1;  
            long l = this.seed;  
            l = l * l;  
            string strTime = l.ToString();  
            int w = strTime.Length / 3;  
            string str = "";  
            for (int i = w; i < strTime.Length - w; i++)  
                str += strTime[i];  
            l = long.Parse(str);  
            return l % Value;  
        }  
        //产生下限为minValue上限为maxValue的伪随机数   
        public long Next(long minValue, long maxValue)  
        {  
            if (minValue < 0 || maxValue < 0 || minValue > maxValue)  
                return -1;  
            long l = this.seed;  
            l = l * l;  
            string strTime = l.ToString();  
            int w = strTime.Length / 3;  
            string str = "";  
            for (int i = w; i < strTime.Length - w; i++)  
                str += strTime[i];  
            l = long.Parse(str);  
            return l % (maxValue - minValue) + minValue;  
        }  
        //伪随机数填充指定的比特数组   
        public void NextBytes(byte[] buffer)  
        {  
            long Value = 0;  
            Value = this.Next() % 255;  
            for (int i = 0; i < buffer.Length; i++)  
            {  
                Value = Value * Value;  
                string strTime = Value.ToString();  
                int w = strTime.Length / 3;  
                string str = "";  
                for (int j = w; j < strTime.Length - w; j++)  
                    str += strTime[j];  
                Value = long.Parse(str);  
                Value = Value % 255;  
                buffer[i] = (byte)Value;  
            }  
        }  
        //产生0.0到1.0的伪随机数   
        public double NextDouble()  
        {  
            long l = this.Next(0, 100000);  
            if (l == 100000)  
                return 1.0;  
            l = l * l;  
            string strTime = l.ToString();  
            int w = strTime.Length / 3;  
            string str = "0.";  
            for (int i = w; i < strTime.Length - w; i++)  
                str += strTime[i];  
            double d = double.Parse(str);  
            return d;  
        }  
    }  

posted on 2010-01-18 17:09  努力实现目标  阅读(365)  评论(0编辑  收藏  举报