c# – 在内部使用双打来生成随机整数
我发布了一堆开源随机数发生器
on my site,包括一个正态分布的随机数发生器.要生成10-20范围内的随机整数,我会写一些类似于新的NormalRandomGenerator(10,20).Next().
有人发表了这个评论:
我相信这个评论指的是当有人在我的一个类上调用Next(20)时,在内部,该调用转换为类似(int)someMersenneTwister.NextDouble()* 20(我不记得我是否使用了舍入). 我这样实现它是因为MT既快速又高效(虽然它有一个巨大的随机期).根据我的理解,这是生成随机数的标准方法 – 调用Next(),它返回范围[0..1]中的double,然后乘以和类型转换为int. 这个设计方面有问题吗?是否有更好的方法(更高性能,更快)生成不使用双精度的整数随机数? 对不起,如果这听起来很模糊.我不确定这里是否有问题. 解决方法
不是你的问题的答案(因为它目前的形式IMO没有意义).但是查看代码我发现了许多错误和其他问题:
>播种.随着时间的推移,你会在几毫秒内创建多个UniformRandomGenerators时导致种子冲突.您从System.Random继承该问题. 如果你想生成统一的随机整数,那就是我自己的问题的重复:Generating uniform random integers with a certain maximum,它专注于有效地创建这些整数而不引入偏差.我建议将我的答案与LukeH的答案结合起来. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |