Си диез / Говнокод #20079 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
using System;
using System.Collections.Generic;
using System.Linq;

namespace Lens.Stdlib
{
	/// <summary>
	/// Standard library randomizer methods.
	/// </summary>
	public static class Randomizer
	{
		#region Fields

		/// <summary>
		/// Random seed.
		/// </summary>
		public static readonly Random m_Random = new Random();

		#endregion

		#region Methods

		/// <summary>
		/// Gets a random floating point value between 0.0 and 1.0.
		/// </summary>
		/// <returns></returns>
		public static double Random()
		{
			return m_Random.NextDouble();
		}

		/// <summary>
		/// Gets a random integer value between 0 and MAX.
		/// </summary>
		public static int Random(int max)
		{
			return m_Random.Next(max);
		}

		/// <summary>
		/// Gets a random integer value between MIN and MAX.
		/// </summary>
		public static int Random(int min, int max)
		{
			return m_Random.Next(min, max);
		}

		/// <summary>
		/// Gets a random element from the list.
		/// </summary>
		public static T Random<T>(IList<T> src)
		{
			var max = src.Count - 1;
			return src[Random(max)];
		}

		/// <summary>
		/// Gets a random element from the list using a weighter function.
		/// </summary>
		public static T Random<T>(IList<T> src, Func<T, double> weighter)
		{
			var rnd = m_Random.NextDouble();
			var weight = src.Sum(weighter);
			if (weight < 0.000001)
				throw new ArgumentException("src");

			var delta = 1.0/weight;
			var prob = 0.0;
			foreach (var curr in src)
			{
				prob += weighter(curr) * delta;
				if (rnd <= prob)
					return curr;
			}

			throw new ArgumentException("src");
		}

		#endregion
	}
}

Ну что сказать, 3,4-Метилендиоксиамфетамин

Запостил: dm_fomenok dm_fomenok, (Updated )

Комментарии (31) RSS

      • не лисапед, а статическая обертка
        без контекста откуда это выдрано, обсуждать бессмысленно
        Ответить
        • Ну да, это очень нужный код, я уверен

          // <summary>
          /// Gets a random integer value between 0 and MAX.
          /// </summary>
          public static int Random(int max)
          {
          return m_Random.Next(max);
          }
          Ответить
            • Т.е. мало того, что велосипед, так ещё и непотокобезопасный...
              Ответить
              • потокобезопасный велосипед называется катамаран
                Ответить
              • это не баг, а фича
                гонки данных превращают псевдорандомный генератор в истинно рандомный
                Ответить
                • нет, потому что поведение шедулера не зависит от внешних факторов

                  для истинного рэндома нужна температура, бел шум или что-то, что нельзя расчитать

                  а поведение шедулера (равно как и опорожнение буферов в кеш) посчитать можно

                  правда современные ОС грузят программы по рендомному адресу, и это сильно усложняет задачу
                  Ответить
                  • >> для истинного рэндома нужна температура, бел шум или что-то, что нельзя расчитать

                    Молодой человек, компьютеры не могут работать с тем, что нельзя рассчитать.
                    Ответить
                      • Вот именно. И с бесконечностями они не работают. Понимаешь?
                        Ответить
                        • То есть вот беру я квантовую двухщелевую пепяку, получаю с неё поток невычислимых (потому что недетерминированных) ноликов и единичек, подаю через UART какой-нибудь на комп, и он сгорает синим пламенем?

                          Блин, надо спасать наш родной спектрометр, а то сожгут его квантовые шумы.
                          Ответить
                          • Нолик и единичка - вполне детерминированы, а квантовую пепяку ЭВМ напрямую не поймет
                            Ответить
                            • Мне кажется, у нас определения детерминированности разные. Априорно я не могу сказать, нолик машине не вход придёт или единичка. Вот вообще никак.
                              Ответить
                            • Появление нолика и единички детерминировано? Т. е. ты можешь предсказать, когда с внешнего порта придёт нолик или единичка?
                              Ответить
                  • Зависит от внешних факторов же - пакетов из сети, ответов диска, действий юзера. Из-за этого разные потоки просыпаются...
                    Ответить
  • //Gets a random element from the list.
    можно было сделать как extension method для List
    Ответить
  • Дольфа Лундгрена на такое не хватает...
    Ответить
  • /// <summary>
    /// Как же меня бесит этот майкрософтовский формат инлайн доков...
    /// Такое ощущение, что код на XML пишешь...
    /// </summary>
    /// <param name="hui">Вон, автору даже влом было параметры описывать</param>
    /// <param name="pizda">Не удивлюсь, что именно из-за синтаксиса</param>
    Ответить

Добавить комментарий

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8