Блог пользователя LiebenDrittenReich

Автор LiebenDrittenReich, история, 6 лет назад, По-русски

Сегодня я обнаружил довольно забавную вещь, связанную со вкладкой "Запуск".

Будем тестировать следующий код на Java 228:

public class CurrentTime { public static void main(String[] args){ System.out.println(System.currentTimeMillis()); } }

Запустив его сколько угодно раз, на выходе мы всегда будем получать одно и то же число A, даже если между запусками обновлять страницу. Если в конец кода добавить пробел, то на выходе всегда будет другое число B.

Но если же стереть этот пробел, то неожиданно на выходе опять появится наше знакомое число A!

Мораль такова: если вы хотите, чтобы ваш код действительно тестировался каждый раз, когда вы нажимаете на кнопку "Запустить", добавляйте пробел в конец кода.

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

Полный текст и комментарии »

  • Проголосовать: нравится
  • -20
  • Проголосовать: не нравится

Автор LiebenDrittenReich, история, 6 лет назад, По-русски

Однажды во время одной тренировки мы с командой заметили что-то странное. Чуть позже напишу, что именно было. Дело в том, что после конкурса мы решили исследовать поведение c ++ rand () на наших машинах (мы используем Windows). Итак, мы использовали алгоритм Берлекампа – Масси по результатам rand (), взятым по модулю 2.

Результат шокирует — длина линейного повторения составляет всего 527! Нет, результаты не являются циклическими, просто повторение является коротким.

«Круто, но кого это волнует? Просто случайный факт, который я бы не заметил, и это не повлияло бы на меня». — неправильно!

Мы обнаружили это при решении задачи, которая требовала вычисления ранга двоичной матрицы. Мы хотели что-то проверить, поэтому мы просто сгенерировали большую матрицу с помощью rand (), что оказалось плохим решением. Поскольку только первые 527 столбцов были, скажем, независимыми, остальные определялись первыми 527 столбцами, поэтому ранг не превышал 527, и мы потеряли много времени, просто размышляя о том, что происходит.

Более того, если число столбцов четное, ранг составляет всего 496 (конечно, для матриц достаточно больших размеров). Угадайте, какова длина повторения, если мы посмотрим только на каждое второе значение rand ().

Да, вы правы — 496. Можно заметить, что 527 — 496 = 31, а 31 делит 527! Иллюминаты!

Вот несколько полезных ссылок: 1 2.

Если кто-нибудь может точно объяснить, что происходит для четного числа столбцов, это было бы здорово. Кроме того, если кто-нибудь знает, как rand () смотрит внутрь и может сказать несколько слов об этом, это также было бы здорово.

Полный текст и комментарии »

  • Проголосовать: нравится
  • -51
  • Проголосовать: не нравится