Вас не смущает приставка "псевдо"? " Да, ненастоящее" случайное число! Так когда-то и было - по крайней мере в программируемых калькуляторах и том же Бейсике. Делалось это так - составлялась таблица из истинно случайных чисел - и навсегда зашивалась в ПЗУ (в МК) или файл (в ПК). Далее - далеко не случайно - из этой таблицы брались числа, обычно просто по очереди, сдвигая некий указатель на единицу после каждого запроса RND программой.
Автору действительно попадались подобные реализации генераторов случайных чисел?
В таком случае вместе с любой программой на Basic'е, которая использует генератор случайных чисел, обязательно должен был бы поставляться соответствующий файл, в противном случае она была бы неработоспособной. Лично я такого файла не видел и очень сомневаюсь в его существовании.
Что касается идеи с записью таблицы в ПЗУ, мне она тоже кажется сомнительной. Например, интерпретаторы Basic и Focal для ДВК-1, в которых имелась функция
RND, поставлялись в ПЗУ емкостью 8 Кб, а там особо не разгуляешься, если даже целиком отвести весь объем под таблицу. Объем ПЗУ Sinclair Spectrum ZX малость побольше, 16 Кб, но и там подобной таблицы нет (уж за это я ручаюсь, поскольку в свое время дизассемблировал его до последнего байта).
Вместо этого для генерации псевдослучайной последовательности обычно используют функцию, которая выдает следующее значение на основе предыдущего. Именно поэтому последовательность именно
псевдо, а не случайная, поскольку она всегда повторяется. Впрочем, если брать не так уж много значений, меньше полного цикла повторения функции, то вполне можно считать последовательность случайной.
Для того, чтобы цепочка не начиналась каждый раз с одного и того же места, для инициализации цепочки была добавлена функция RANDOMIZE, в качестве аргумента которой обычно использовали значение, производное от системного времени.
Можно сделать вовсе извращенскими методами- например улавливанием из воздуха электрических помех с помощью специально разработанного устройства, подключемого к USB порту и распространяемое вместе с программой, батарейки и гарантия 1 месяц прилагается, пломбы не срывать.
А где гарантия, что этой самой "электрической помехой из воздуха" не станут 50 Гц от ближайшего силового кабеля? Тут ведь настоящий белый шум нужен, а его генератор - не столь простое устройство.
Запускаем программу - и совершаем мышедвижения.
А как быть, если не хочется двигать мышь? Например, неинтерактивная программа моделирования чего-нибудь, получающая на вход "случайную" последовательность. Нанимать кого-то для прогуливания мыши по коврику на все время процесса?
Еще одна проблема, на мой взгляд, вылезет, если нужно заполнить случайными данными массив. Современные процессоры выполняют уж куда больше миллиона коротких операций, в секунду, но возьмем даже миллион. Далеко ли уедет мышь за микросекунду?
Мне кажется, приведено не самое лучшее решение проблемы из возможных.
P.S. Программист обращается к коллеге:
- Вася, у тебя нет случаем генератора случайных чисел?
Вася, не отрываясь от листинга:
- 17!