- 1
- 2
- 3
- 4
- 5
private int GenerateRandom(int MaxValue)
{
var mas = Guid.NewGuid().ToByteArray();
return BitConverter.ToInt32(mas, 4) % MaxValue;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+113
private int GenerateRandom(int MaxValue)
{
var mas = Guid.NewGuid().ToByteArray();
return BitConverter.ToInt32(mas, 4) % MaxValue;
}
....
p.s. случайно минусанул :(
>4
Int32 и 4 - никаких ассоциаций?
Без описания ToInt32(byte[],int) - непонятно, но я бы лично вычислил хеш-код.
http://bit.ly/VhfRr6
в вижуалке ничего подобного не замечено (tools-create guid)
только старшая тетрада в девятом байте одинакова
9447ea2a-2cbf-4e89-80dd-96b345af2eb9
13c1430e-421c-482a-b515-a9d6abfb4d91
367bfed2-4325-434c-9ad2-cfef5e73e2ff
f07a0df9-b86e-4af9-9080-45804ed7c2ad
f16b4187-c1c8-48c6-8a8a-9fe825ad7867
a9a32db2-1c73-41a1-9232-8b93cc6ce76c
cdb5ca5b-3bad-4f2b-af1e-90b211abf016
b927e20a-fc9f-49a6-af00-9511f5554e98
ea56f721-be31-4cc3-a37b-f7f116b00a94
6247fe5a-0379-4694-88c1-c56c23bc2e38
e57089c6-3d1a-41cc-a2e0-6c66f3c3f02f
6cd51cab-de9e-4031-9752-791f6ca86bc9
5227821b-91f7-4f67-88eb-7289ec6767ed
2183a5ad-3e58-454f-8951-8e800d61512c
2f2cf309-6bc4-4fef-9095-423d4cd570a3
04827a62-06f2-4e52-813f-2ba64bf0da4b
--
Каждый раз, когда я вижу рядом "Random" и "% MaxValue" мне хочется сделать facepalm.
Мы хотим значения с 0 по 3, и делаем %4
В результате мы имеем такую таблицу:
0123456789
0123012301
Шанс получить 0 и 1 - 3/10
Шанс получить 2 и 3 - 2/10
Конечно, ранд_макс на несколько порядков выше, и эффект мал, но не всегда пренебрежимо мал.
Всё зависит от отношения rand_max/max
А вообще сишный ранд говно потому, что деление с остатком на n - это тормоза.
В Паскале же сделано оптимальнее, ведь берётся seed*n/(2**32), что делается одним умножением и взятием edx.