本類思想:高性能計數器以微妙級累加數值,逢十進位。如果動態的單看數值最後一個數字,一定是在0-9之間不斷旋轉,就像一個滾動的俄羅斯輪盤,暫停時一定指向其中某一位數字並且指向哪個數字是不可預測的,當暫停次數足夠多時,分佈在各個數值上的概率無限接近。 寫作時間:2018-11-07 本文只代表本人的見解 ...
本類思想:高性能計數器以微妙級累加數值,逢十進位。如果動態的單看數值最後一個數字,一定是在0-9之間不斷旋轉,就像一個滾動的俄羅斯輪盤,暫停時一定指向其中某一位數字並且指向哪個數字是不可預測的,當暫停次數足夠多時,分佈在各個數值上的概率無限接近。
using System.Runtime.InteropServices; namespace SuiJiShu { /// <summary> /// 隨機數生成器 /// </summary> public class SuiJiShuShengChengQi { //獲取高性能計數器數值 [DllImport("kernel32.dll")] extern static short QueryPerformanceCounter(ref long x); /// <summary> /// 十以內隨機數 /// </summary> /// <returns></returns> public int ShiYiNeiSuiJiShu() { long _dangQianJiShuQiZhi = 0; QueryPerformanceCounter(ref _dangQianJiShuQiZhi); string _dangQianJiShuQiZhiString = _dangQianJiShuQiZhi.ToString(); return int.Parse(_dangQianJiShuQiZhiString.Remove(0, _dangQianJiShuQiZhiString.Length - 1)); } /// <summary> /// 百以內隨機數 /// </summary> /// <returns></returns> public int BaiYiNeiSuiJiShu() { long _dangQianJiShuQiZhi = 0; QueryPerformanceCounter(ref _dangQianJiShuQiZhi); string _dangQianJiShuQiZhiString = _dangQianJiShuQiZhi.ToString(); return int.Parse(_dangQianJiShuQiZhiString.Remove(0, _dangQianJiShuQiZhiString.Length - 2)); } /// <summary> /// 千以內隨機數 /// </summary> /// <returns></returns> public int QianYiNeiSuiJiShu() { long _dangQianJiShuQiZhi = 0; QueryPerformanceCounter(ref _dangQianJiShuQiZhi); string _dangQianJiShuQiZhiString = _dangQianJiShuQiZhi.ToString(); return int.Parse(_dangQianJiShuQiZhiString.Remove(0, _dangQianJiShuQiZhiString.Length - 3)); } } }
//ShiYiNeiSuiJiShu運行一百萬次數值分佈: 0:97872 1:100082 2:100237 3:99895 4:100556 5:99995 6:100384 7:99928 8:100339 9:100712 //測試代碼 Dictionary<int, List<int>> _tongJiZiDian = new Dictionary<int, List<int>>(); for (int i = 0; i < 10; i++) { _tongJiZiDian.Add(i, new List<int>()); } SuiJiShuShengChengQi _SuiJiShuShengChengQi = new SuiJiShuShengChengQi(); for (int i = 0; i < 1000000; i++) { int _suiJiShu = _SuiJiShuShengChengQi.ShiYiNeiSuiJiShu(); _tongJiZiDian[_suiJiShu].Add(_suiJiShu); } StringBuilder _sss = new StringBuilder(); foreach (KeyValuePair<int, List<int>> key in _tongJiZiDian) { _sss.Append(key.Key.ToString() + ":" + key.Value.Count.ToString() + "\r\n"); }
寫作時間:2018-11-07
=====================================================================================
本文只代表本人的見解,可能存在錯誤,僅用於技術交流。如果你喜歡該文,可以掃下麵的二維碼打賞我(打賞敬請備註“博客園打賞”五字)。