powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Rnd(-17) = Rnd(-1114111) ...
17 сообщений из 17, страница 1 из 1
Rnd(-17) = Rnd(-1114111) ...
    #40125287
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вам не кажется странным, что Rnd(-17) = Rnd(-1114111) (оба равны 0.108894348144531 )?

При этом Rnd(-16) = 0.202644348144531, а
Rnd(-1114110) = 0.194344997406006 ...
...
Рейтинг: 0 / 0
Rnd(-17) = Rnd(-1114111) ...
    #40125289
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет
...
Рейтинг: 0 / 0
Rnd(-17) = Rnd(-1114111) ...
    #40125291
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У -1114111 и -17 есть кое-что общее
У -16 и -1114110 такого общего нет
...
Рейтинг: 0 / 0
Rnd(-17) = Rnd(-1114111) ...
    #40125292
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... кстати, дальше они начинают задваиваться подряд:
Rnd(-18) = Rnd(-1179647) = 0.0151443481445313
Rnd(-19) = Rnd(-1245183) = 0.921394348144531

То есть с шагом 2^16: (1179647-1114111) = (1245183-1179647) = 65536

Однако тогда не понятно, почему Rnd(-16) не равно Rnd(-(1114111-65536)) ...
...
Рейтинг: 0 / 0
Rnd(-17) = Rnd(-1114111) ...
    #40127114
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
от отчаяния продолжаю упираться в Rnd(). Сподобился посмотреть коллизии в ряду Rnd(-Sqr(N+0.1)). Оказывается (6999999;7000000) - она самая, одна из множества, идущих с шагом 1 перед 7 миллионами.

Код: vbnet
1.
2.
3.
xxxxx1 = Sqr(7000000.1 - 1)
xxxxx2 = Sqr(7000000.1)
Debug.Print xxxxx1, xxxxx2, Rnd(-xxxxx1), Rnd(-xxxxx1) - Rnd(-xxxxx2): Stop

-- выдаёт

2645.75114098057 2645.75132996281 0.6062072 0
...
Рейтинг: 0 / 0
Rnd(-17) = Rnd(-1114111) ...
    #40127115
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в чем, собственно, проблема?
Rnd - генератор псевдослучайных чисел. Для криптографии и научной работы он не подходит.
...
Рейтинг: 0 / 0
Rnd(-17) = Rnd(-1114111) ...
    #40127117
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

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

В частности (но не только) мне нужно научиться вызывать Rnd() на множестве натуральных чисел так, чтобы в ряду возвращаемых значений -- типа Rnd(-f(n)) -- коллизии появлялись не слишком рано и не в слишком большом количестве.
...
Рейтинг: 0 / 0
Rnd(-17) = Rnd(-1114111) ...
    #40127125
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
Shocker.Pro,

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

Алгоритм
Простая реализация
...
Рейтинг: 0 / 0
Rnd(-17) = Rnd(-1114111) ...
    #40127151
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Rnd(-17) = Rnd(-1114111) ...
    #40127161
ATM-TURBO 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RtlUniform RtlRandom/RtlRandomEx
...
Рейтинг: 0 / 0
Rnd(-17) = Rnd(-1114111) ...
    #40127229
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот ещё натуралистам на заметку.

Если рассматривать составной ключ из двух значений Rnd(-k) и Rnd(-2*k-1), то первая коллизия у него случится ровнехонько при (2*k+1) равном 33554431, то есть за единицу до 2^25.
...
Рейтинг: 0 / 0
Rnd(-17) = Rnd(-1114111) ...
    #40127337
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS, встроенная функция Rnd не предназначена для практического использования. Как уже выше писали для генерации случайных чисел надо использовать CryptoAPI
...
Рейтинг: 0 / 0
Rnd(-17) = Rnd(-1114111) ...
    #40127591
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eolt,
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Private Declare Function RtlGenRandom Lib "AdvAPI32" Alias "SystemFunction036" ( _
                            ByVal pRandomBuffer As Long, _
                            ByVal RandomBufferLength As Long) As Long

Private Function RGRLong() As Long
        RtlGenRandom VarPtr(RGRLong), LenB(RGRLong)
End Function

погоняю, спасибо.
...
Рейтинг: 0 / 0
Rnd(-17) = Rnd(-1114111) ...
    #40127596
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eolt, погонял. Первое число -- шаг цикла вызовов RGRLong, на котором возникает коллизия (с предыдущими "случайными" значениями), второе -- факультативно -- само значение, создавшее коллизию:

180428 -48233963
212707 -1009605452
214897 -733137737
220422 1818607683
227443 470532141
252687 -1520229146
253380 -1421152658
262467 1345408526
274622 -33471971

Как-то это очень подозрительно... Что я делаю (или понимаю) не так?
...
Рейтинг: 0 / 0
Rnd(-17) = Rnd(-1114111) ...
    #40127707
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дотумкал: первая коллизия на шаге ~100 000 -- это нормально для 4-байтного идеального ДСЧ...
...
Рейтинг: 0 / 0
Rnd(-17) = Rnd(-1114111) ...
    #40127732
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у RtlGenRandom входной параметр - длина формируемого буфера.
Замени, например, тип возвращаемого значения на Currency и посмотри, что получится.
...
Рейтинг: 0 / 0
Rnd(-17) = Rnd(-1114111) ...
    #40127798
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby, коллизии всё равно будут, хотя и позже, конечно. Просто (мне) нужно было осознать, что они не являются дефектом, если ДСЧ не заявлен как циклический.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Rnd(-17) = Rnd(-1114111) ...
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (1): Анонимы (1)
Пользователи онлайн (11): Анонимы (8), Yandex Bot, Bing Bot 4 мин., Google Bot 6 мин.
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]