Comments 30
<del>
+2
Еще один повод использовать SecureRandom вместо обычного
+2
Зависит от цели. Для криптографии — конечно, но иногда нужно просто получить не слишком предсказуемое число, и желательно быстро, например, в компьютерных играх. В некоторых случаях даже предпочтительно использовать детерминированный источник псевдослучайных чисел — в тех же компьютерных играх при процедурной генерации мира, например.
+7
Детерминированный источник псевдослучайных чисел отлично получается из любого потокового шифра с заранее известным ключом. Возьмите ту же ChaCha20 и извлекайте себе сколько нужно псевдослучайных данных. Туда же можно прикрутить какое угодно распределение случайных величин, если нужен перекос в ту или иную сторону
+4
UFO just landed and posted this here
Стало любопытно, что за рандом зарандомился у топикстартера, за неимением явы спортировал код на сишечку:
#include <stdio.h>
long seed;
void setSeed(long newseed) {
seed = (newseed ^ 0x5DEECE66DL) & ((1L << 48) - 1);
}
int next(int bits) {
seed = (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1);
return (int)(seed >> (48 - bits));
}
int nextInt(int n) {
int bits, val;
do {
bits = next(31);
val = bits % n;
} while (bits - val + (n-1) < 0);
return val;
}
void main() {
setSeed(76880392499L<<11);
char alphabet[] = " abcdefghijklmnopqrstuvwxyz";
int len=sizeof(alphabet)-1;
int n;
while ((n = nextInt(len)) > 0)
printf("%c", alphabet[n]);
printf("\n");
}
Запуск (сохранить как r.c
):
make r && ./r
+2
Так я же поставил ссылку на ideone.com/zlY6EI
0
long
в C — это не тот же самый long
в Java. Правильнее было бы использовать int64_t
.
(int)(seed >> (48 - bits))
— неопределённое проведение в 32-битной программе или в программе, собранной в Visual Studio.
+3
А есть ли у вас код, который генерирует seed для заранее определенной строки (или говорит, что это невозможно)?
-1
Как раз его созданию и оптимизации статья и посвящена. Если последуете моим советам, то и у вас он тоже будет :)
+5
Я имел в виду ссылку на репозиторий или хотя бы сниппет — в статье не нашел.
+2
В ideone.com/ROhmTA замените
Long.MIN_VALUE
на 0
, Long.MAX_VALUE
на 79536431L<<17
, и строчку random.setSeed(seed);
на кусок кода, показанный в конце статьи.+1
В огнелисе всё нормально с формулами.
0
Вот эта картинка
Заставила меня трижды протереть глаза, прежде чемя понял подставу.
+1
Я имею в виду, что вместо latex.codecogs.com/png.latex?%5Cdpi%7B125%7D%5Csmall%5Ctextstyle%5Cleft%5Clfloor%5Cfrac%7B2%5E%7B31%7D-1%7D%7B27%7D%5Cright%5Crfloor+1 на хабрасторож была сохранена latex.codecogs.com/png.latex?%5Cdpi%7B125%7D%5Csmall%5Ctextstyle%5Cleft%5Clfloor%5Cfrac%7B2%5E%7B31%7D-1%7D%7B27%7D%5Cright%5Crfloor+1" — захватив кавычку разметки.
0
Я не столько про кавычку, сколько про то, что правая часть формулы лично у меня на экране — "Мыло", тогда как левая — вполне норм:
+1
Исправьте, пожалуйста:
Правильно — двухсот (двух нот)
один шанс из двухста миллионов миллионов
Правильно — двухсот (двух нот)
+2
Sign up to leave a comment.
Генератор неслучайных чисел