标题:无聊随手写了个SB东西
只看楼主
zkkpkk
Rank: 2
等 级:论坛游民
威 望:5
帖 子:489
专家分:28
注 册:2006-6-17
 问题点数:0 回复次数:1 
无聊随手写了个SB东西


using System;

namespace rendom
{
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;
}
}
class AppMain
{
static int Main()
{
Rand rand=new Rand();
//产生伪随机数
long n=rand.Next();
Console.WriteLine(n.ToString());
//产生100内的伪随机数
n=rand.Next(100);
Console.WriteLine(n.ToString());
//产生20到30之间的伪随机数
n=rand.Next(20,30);
Console.WriteLine(n.ToString());
//产生0.0到1.0之间的伪随机数
b=rand.NextDouble();
Console.WriteLine(b.ToString());
Console.ReadLine();
}
}
}


发现我NextDouble的实现很无赖

[此贴子已经被作者于2007-5-9 11:25:15编辑过]

搜索更多相关主题的帖子: long private public 
2007-05-08 21:25
fyi1106
Rank: 1
等 级:新手上路
帖 子:327
专家分:0
注 册:2006-10-14
得分:0 

JavaScript forever!
2007-05-08 21:58



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-137736-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.437499 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved