博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DIY随机数产生类
阅读量:5782 次
发布时间:2019-06-18

本文共 2083 字,大约阅读时间需要 6 分钟。

自定义随机数产生类

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;  

        }  

    }  

}  

转载于:https://www.cnblogs.com/flyinghigher/archive/2012/12/21/2828136.html

你可能感兴趣的文章
where与having的区别
查看>>
设计模式(十)装饰器模式
查看>>
FB 宕机,Telegram 用户疯涨,P**hub 流量猛增
查看>>
python之time和datetime模块
查看>>
Python学习资源整理
查看>>
Mac中的定时任务利器:launchctl
查看>>
java序列化浅谈
查看>>
Confluence 6.7 如何查看已经安装的插件
查看>>
你试过不用if撸代码吗?
查看>>
webpack打包nodejs项目(前端代码)
查看>>
使用指针比较整型数据的大小
查看>>
Elasticsearch-通过Kibana查看索引数据
查看>>
森莎创建树形菜单和按钮触发行为
查看>>
报表怎样实现滚动的公告效果?
查看>>
poj1321 棋盘(dfs)
查看>>
linux sysbench (一): CPU性能测试详解
查看>>
每日文献:2018-01-25
查看>>
虚拟化篇之前后端驱动分析
查看>>
用HTML5开发一个小游戏
查看>>
《花,你何时的绚烂》(三)
查看>>