Pull to refresh
9
0
Send message
Уже не раз использовал генератор в качестве поверочного, переписывание алгоритма для математического пакета операция временеемкая, в некоторых задачах теории игр оптимизация использовала именно целочисленную арифметику, повторное использование остатка от деления «выбивало» как C так и С# генераторы, в то время как приведенный алгоритм к таким арифметическим процедурам оказался устойчив. Позже для окончательного решения код все же был дублирован для математического пакета, и результаты вычислений с использованием этого генератора совпали. Из-за необходимости быстродействия в коде просто усложнили процедуры преобразования исключив ряд оптимизаций, но я только лишний раз убедился в своем эмпирическом выводе:
считать медленно но точно, или быстро но то что уже практически известно.
«Некого» иногда недостаточно, статья именно про равномерное распределение, в криптографии и играх наличие выделенной области значений существенно влияет на конечные результаты.

Плюс вы переносите сложность получения состояния генератора на ограниченность доступа к свойствам системы, аппаратные генераторы на основе полупроводников тоже частично это используют. Но я намеренно не указывал в ключевых словах криптографию так как код алгоритма исполняется на стороне пользователя, и существенной сложности в получении состояния генератора нет. Помогает то что знание состояния не позволит получить повторяемости так как частично используются случайные данные из памяти, влияние которых не создает отклонений от равномерности получаемого распределения.
Все замечания постараюсь внести в содержание публикации, текст не прогонял через Главред , работаю напрямую редактором Харбр.
Теперь что касается детерминистичности для точного решения и аналитики, период повтора траектории при зеркальном отражении элементов в сфере на множестве иррациональных и трансцендентных числах — бесконечность, формально подкоренному выражению ничто не мешает принимать и трансцендентные значения, откуда получаем что вычисление состояния генератора потребует знания функции последовательности иррациональных и трансцендентных чисел, что в действительности невозможно, потому если вы заботитесь про криптографическую стойкость, то она обеспечена аналитически, плюс как упомянуто в статье реализация дополняет поток внешними случайностями и тем усложняет поток, доводя до класса True Random.
Алгоритм отражения шариков без изменения свойств можно реализовать в целых числах,
пожалуйста приведите ссылку где такое реализовано для функции квадратного корня использующегося при вычислении времени до взаимодействия.
Ну и конечно никакого true random и внешней связи с памятью тут нет

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

А теперь вместо квадрата случайное направление и порядка сотни элементов, которые в процессе еще и обмениваются импульсом после каждого взаимодействия с границей.
Я не претендую на место в рынке по производительности или конкуренции с аппаратными устройствами, но мне лично был интересен вопрос о существовании источника для практически прямого получения именно случайных чисел с плавающей точкой.
Плюс я получаю значение целиком, не заботясь о битности или внутреннем устройстве чисел с плавающей точкой. Переносимость такого кода выше, хотя представить ситуацию когда высокоуровневый язык оказывается без возможности использования библиотек практически сложно.
Чтобы получить случайный float достаточно целочисленного генератора


Использование квантовых ям в аппаратных генераторах действительно создает целые числа, как правило 0 или 1 из которых потом собирается последовательность необходимой длинны, но если у вас такого устройства нет?

… allows you to generate random decimal fractions in the [0,1] interval. The randomness comes from atmospheric noise, which for many purposes is better than the pseudo-random number algorithms typically used in computer programs.
Есть числа с плавающей точкой, а действительных нет.

Паскаль Математика,… используют слово Real
Для использования событий на поверхности сферы — границы или сосуда что содержит газ, используется дополнительное преобразование.
Я не знаю использовалось ли оно в UNIX системах, или использовались внутренние события, которые из-за влияния границы имеют плотность отличную от равномерной, сам генератор тогда требует большого времени разогрева, и еще ряд сложностей.
Шарик ударяется о стенку сосуда, — событие на границе. Для уменьшения сложности вычислений, в алгоритме используется отражение центра шарика.
Да актуально, но приведенная статья посвящена больше внутренней работе функций преобразования, я сразу перешел к следующей главе, но и там не заметил упоминания или построения функции сравнения.
Дело в разных размерах массивов, на практике можно получить нужную последовательность несколькими способами, но они отличаются разными способами подготовки массивов и позициями в них. Что говорить на остаток и саму позицию здесь и разбираем.

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

К той же близкой по виду взаимнокорреляционной функции уже есть вопросы, инверсия порядка и отрицательное время похожи вот только для ряда нет отрицательных индексов, или значения нужно дополнительно определять, или иметь константу обеспечивающую положительность разницы, или и то и другое. На все эти вопросы более просто отвечает DTF.
Мне хватило точности и без использования целочисленного словаря. Но спасибо за точное название метода, может кому то пригодится.
Спор о выборе теории для иллюстрации действия алгоритма. Автокорреляция это еще один термин который от темы уводит дальше чем свертка.
В DFT интегрирования нет вообще, наиболее простое его определение связано со значением полинома в точке, приводящему при подстановке к подобию части ряда Фурье. Соответственно и имеет все свойства этого преобразования, доказательство обычно проводят индукцией, но все же отличие DFT и ряда есть, первое это точное преобразование.

Теперь про интегрирование(приведу без комплексного варианта),
— в сверточном определении f(x)g(y-x)dx
— для взаимнокорреляционной функции f(x+y)g(x)dx
переход от одного к другому это замена переменных
x=x+y — вот откуда смещение.

Если вы будете искать t[i+j]p[j] в произведении полиномов
A×B=InvDFT(DFT(A)×DFT(B))
то получите начальную позицию m.

Я использую именно свойство DFT так как оно определено аналитически точно, но в пределах машинной точности вычислений.

Тогда как для использования теоремы о свертке мне придется сделать логический переход от бесконечных сумм в преобразованиях Фурье к конечным, сделать замену переменных, и обосновать исходя из редукции размеры используемых массивов.

Дополнительные действия есть как при использовании DFT, так и при FT, но для первого их меньше. В названии статьи приведено DFT и именно его свойствами я и пользовался в создании алгоритма, хотя можно использовать и свойства FT

сможете его подтвердить реальным примером,

разумеется:
— использование инверсии и взаимнокорреляционной функции приводят началу последовательности PT с позиции m
использование свертки и сопряжения, приводят началу последовательности PT с позиции 1

Такое смещение в точности соответствует преобразованию для изменения «знака функции времени второго аргумента».

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

Однако как оказалось несмотря на близость названий, DFT имеет другой набор свойств хотя и совместим со свойствами обычного преобразования. Само определение DFT для полинома это его значение в точке x=Exp(2*i*Pi/n), — точное, как и формула преобразования, которая вроде похожа на сверточную версию но все же без сопряжения. Соответственно не имеет ошибки связанной с конечностью ряда, а содержит только ошибку связанную точностью машинного вычисления. Которую, как вы упомянули, возможно устранить при сведении вычислений к целочисленным преобразованиям.

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

В итоге как оказалось вроде бы очевидное и легкое дополнение для каждой лекции и статьи которые просматривал, в реализации дюжины строчек кода, показали страшную ретивость и потребовали уйму времени для их отладки и согласования.
Задача которая привела к написанию статьи была связана с нахождением величины смещения двух изображений, меня не устроила скорость «наивной» реализации. Потому такой развлекательный вариант исходного массива.
Спасибо за замечание, тоже думаю внести правку в статью, так как это написано только в коде. Ищется отрезок длинной W/8 с началом в точке W/4 на линии рисунка с вертикальной координатой H/2.
где W-ширина (width), H-высота(height) рисунка в пикселях.

...
y = IntegerPart[H/2]; (*Pattern width and coordinates*)
x = IntegerPart[W/4];
w = IntegerPart[W/8];

Information

Rating
Does not participate
Registered
Activity