Как стать автором
Обновить

Комментарии 30

Еще один повод использовать SecureRandom вместо обычного
Зависит от цели. Для криптографии — конечно, но иногда нужно просто получить не слишком предсказуемое число, и желательно быстро, например, в компьютерных играх. В некоторых случаях даже предпочтительно использовать детерминированный источник псевдослучайных чисел — в тех же компьютерных играх при процедурной генерации мира, например.
Детерминированный источник псевдослучайных чисел отлично получается из любого потокового шифра с заранее известным ключом. Возьмите ту же ChaCha20 и извлекайте себе сколько нужно псевдослучайных данных. Туда же можно прикрутить какое угодно распределение случайных величин, если нужен перекос в ту или иную сторону
НЛО прилетело и опубликовало эту надпись здесь
Это формулы в формате MathJax, вернее, Tex. В частности ^ превращает выражение в {} в верхний индекс, \approx соответствует «примерному равенству», \cdot — символ умножения (точка). Почему-то не сработал скрипт MathJax.

В мобильной лисе тоже.

Давайте позовём сюда Exosphere
Знаем-знаем, проблема в работе.

Стало любопытно, что за рандом зарандомился у топикстартера, за неимением явы спортировал код на сишечку:


#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
Так я же поставил ссылку на ideone.com/zlY6EI

Я прослепошарил её при первом прочтении. Да и всё равно есть привычка не полагаться на онлайн-сервисы :)

long в C — это не тот же самый long в Java. Правильнее было бы использовать int64_t.
(int)(seed >> (48 - bits)) — неопределённое проведение в 32-битной программе или в программе, собранной в Visual Studio.

Да, вы правы.

Как раз его созданию и оптимизации статья и посвящена. Если последуете моим советам, то и у вас он тоже будет :)

Я имел в виду ссылку на репозиторий или хотя бы сниппет — в статье не нашел.

В ideone.com/ROhmTA замените Long.MIN_VALUE на 0, Long.MAX_VALUE на 79536431L<<17, и строчку random.setSeed(seed); на кусок кода, показанный в конце статьи.
В огнелисе всё нормально с формулами.
Мобильный
файрфокс

boomburum, тут кажется поехала разметка формул.

Уточню, что проблем две:
  • В мобильной версии формулы не рендерятся вообще
  • В десктопной версии в формулах исчезают минусы
cc Meklon

Проблемка была в том, что в посте были картинки с latex.codecogs.com, которые почему-то не подтянулись в Хабрасторож, из-за чего что-то там с воркерами случилось — передал коллегам информацию для изучения ) Картинки перезалил вручную и вроде всё нормально стало.
В мобильной версии формулы появились, но почему-то с »> вместо >>>. Отчего так? В десктопной версии c >>> всё в порядке.

Вот эта картинка
image
Заставила меня трижды протереть глаза, прежде чемя понял подставу.

Вот так аккуратно Boomburum заменял формулы, что захватил кавычку вместе с формулой :-) Я исправил её обратно, и формулы в мобильной версии снова исчезли. Ну и дела!
Хм, посмотрел ревизию с правкой — кавычку не трогал ) Но почему-то сейчас те картинки, что я заливал на хабрасторож — снова на latex.codecogs.com. Ну и дела! )

Я не столько про кавычку, сколько про то, что правая часть формулы лично у меня на экране — "Мыло", тогда как левая — вполне норм:


img

Исправьте, пожалуйста:
один шанс из двухста миллионов миллионов

Правильно — двухсот (двух нот)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории