Самый быстрый способ генерации случайного логического значения
таким образом, существует несколько способов создания случайного bool в C#:
- С Помощью Случайного.Далее ():
rand.Next(2) == 0
- С Помощью Случайного.NextDouble():
rand.NextDouble() > 0.5
есть ли на самом деле разница? Если да, то какой из них на самом деле имеет лучшую производительность? Или есть другой способ, который я не видел, что может быть еще быстрее?
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.5rand.NextDouble() >= 0.5ряд 1: [0.0 ... 0.5[
Ряд 2: [0.5 ... 1.0[
|Диапазон 1| = |ряд 2|
Comments