经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C# » 查看文章
一个随机数类
来源:cnblogs  作者:刀奈特程序员  时间:2018/11/8 9:57:23  对本文有异议

       本类思想:高性能计数器以微妙级累加数值,逢十进位。如果动态的单看数值最后一个数字,一定是在0-9之间不断旋转,就像一个滚动的俄罗斯轮盘,暂停时一定指向其中某一位数字并且指向哪个数字是不可预测的,当暂停次数足够多时,分布在各个数值上的概率无限接近。

  1. using System.Runtime.InteropServices;
  2. namespace SuiJiShu
  3. {
  4. /// <summary>
  5. /// 随机数生成器
  6. /// </summary>
  7. public class SuiJiShuShengChengQi
  8. {
  9. //获取高性能计数器数值
  10. [DllImport("kernel32.dll")]
  11. extern static short QueryPerformanceCounter(ref long x);
  12. /// <summary>
  13. /// 十以内随机数
  14. /// </summary>
  15. /// <returns></returns>
  16. public int ShiYiNeiSuiJiShu()
  17. {
  18. long _dangQianJiShuQiZhi = 0;
  19. QueryPerformanceCounter(ref _dangQianJiShuQiZhi);
  20. string _dangQianJiShuQiZhiString = _dangQianJiShuQiZhi.ToString();
  21. return int.Parse(_dangQianJiShuQiZhiString.Remove(0, _dangQianJiShuQiZhiString.Length - 1));
  22. }
  23. /// <summary>
  24. /// 百以内随机数
  25. /// </summary>
  26. /// <returns></returns>
  27. public int BaiYiNeiSuiJiShu()
  28. {
  29. long _dangQianJiShuQiZhi = 0;
  30. QueryPerformanceCounter(ref _dangQianJiShuQiZhi);
  31. string _dangQianJiShuQiZhiString = _dangQianJiShuQiZhi.ToString();
  32. return int.Parse(_dangQianJiShuQiZhiString.Remove(0, _dangQianJiShuQiZhiString.Length - 2));
  33. }
  34. /// <summary>
  35. /// 千以内随机数
  36. /// </summary>
  37. /// <returns></returns>
  38. public int QianYiNeiSuiJiShu()
  39. {
  40. long _dangQianJiShuQiZhi = 0;
  41. QueryPerformanceCounter(ref _dangQianJiShuQiZhi);
  42. string _dangQianJiShuQiZhiString = _dangQianJiShuQiZhi.ToString();
  43. return int.Parse(_dangQianJiShuQiZhiString.Remove(0, _dangQianJiShuQiZhiString.Length - 3));
  44. }
  45. }
  46. }
  1. //ShiYiNeiSuiJiShu运行一百万次数值分布:
  2. 0:97872
  3. 1:100082
  4. 2:100237
  5. 3:99895
  6. 4:100556
  7. 5:99995
  8. 6:100384
  9. 7:99928
  10. 8:100339
  11. 9:100712
  12.  
  13. //测试代码
  14. Dictionary<int, List<int>> _tongJiZiDian = new Dictionary<int, List<int>>();
  15. for (int i = 0; i < 10; i++)
  16. {
  17. _tongJiZiDian.Add(i, new List<int>());
  18. }
  19. SuiJiShuShengChengQi _SuiJiShuShengChengQi = new SuiJiShuShengChengQi();
  20. for (int i = 0; i < 1000000; i++)
  21. {
  22. int _suiJiShu = _SuiJiShuShengChengQi.ShiYiNeiSuiJiShu();
  23. _tongJiZiDian[_suiJiShu].Add(_suiJiShu);
  24. }
  25. StringBuilder _sss = new StringBuilder();
  26. foreach (KeyValuePair<int, List<int>> key in _tongJiZiDian)
  27. {
  28. _sss.Append(key.Key.ToString() + ":" + key.Value.Count.ToString() + "\r\n");
  29. }

 

写作时间:2018-11-07

=====================================================================================
本文只代表本人的见解,可能存在错误,仅用于技术交流。如果你喜欢该文,可以扫下面的二维码打赏我(打赏敬请备注“博客园打赏”五字)。

  1.  

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号