Самый быстрый способ генерации случайного логического значения



таким образом, существует несколько способов создания случайного bool в C#:




  • С Помощью Случайного.Далее ():rand.Next(2) == 0

  • С Помощью Случайного.NextDouble(): rand.NextDouble() > 0.5


есть ли на самом деле разница? Если да, то какой из них на самом деле имеет лучшую производительность? Или есть другой способ, который я не видел, что может быть еще быстрее?

623   2  

2 ответов:

The первый вариант -rand.Next(2) выполняет за кулисами следующий код:

if (maxValue < 0)
{
    throw new ArgumentOutOfRangeException("maxValue",
        Environment.GetResourceString("ArgumentOutOfRange_MustBePositive", new object[] { "maxValue" }));
}
return (int) (this.Sample() * maxValue);

и второй вариант -rand.NextDouble():

return this.Sample();

так как первый вариант содержит maxValue проверка, умножение и литья, второй вариант, вероятно, быстрее.

небольшое повышение для второй вариант:

По данным MSDN

public virtual double NextDouble()

возвращает

двойной точности с плавающей запятой больше или равно 0,0 и меньше 1,0.

поэтому, если вы хотите равномерно распределить случайный bool, вы должны использовать >= 0.5

rand.NextDouble() >= 0.5

ряд 1: [0.0 ... 0.5[
Ряд 2: [0.5 ... 1.0[
|Диапазон 1| = |ряд 2|

Comments

    Ничего не найдено.