Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
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
}
}
То есть вот беру я квантовую двухщелевую пепяку, получаю с неё поток невычислимых (потому что недетерминированных) ноликов и единичек, подаю через UART какой-нибудь на комп, и он сгорает синим пламенем?
Блин, надо спасать наш родной спектрометр, а то сожгут его квантовые шумы.
/// <summary>
/// Как же меня бесит этот майкрософтовский формат инлайн доков...
/// Такое ощущение, что код на XML пишешь...
/// </summary>
/// <param name="hui">Вон, автору даже влом было параметры описывать</param>
/// <param name="pizda">Не удивлюсь, что именно из-за синтаксиса</param>
без контекста откуда это выдрано, обсуждать бессмысленно
// <summary>
/// Gets a random integer value between 0 and MAX.
/// </summary>
public static int Random(int max)
{
return m_Random.Next(max);
}
гонки данных превращают псевдорандомный генератор в истинно рандомный
для истинного рэндома нужна температура, бел шум или что-то, что нельзя расчитать
а поведение шедулера (равно как и опорожнение буферов в кеш) посчитать можно
правда современные ОС грузят программы по рендомному адресу, и это сильно усложняет задачу
Молодой человек, компьютеры не могут работать с тем, что нельзя рассчитать.
Блин, надо спасать наш родной спектрометр, а то сожгут его квантовые шумы.
Главное - не при детях.
можно было сделать как extension method для List
Но это ж не решение проблемы.