Просмотр полной версии : Ищу наиболее естественный seed random алгоритм.
Посоветуйте, пожалуйста, наиболее точный seed randomizer алгоритм.
Требования простые... :)
Чтобы был наиболее естественным.
Последний, который посмотрел, самый простой и быстрый, и наиболее естественно выглядящий генератор выглядит так:
curSeed = (curSeed * 16807) % 2147483647;
return curSeed / 0x7FFFFFFF + 0.000000000233;
strangedk
27.03.2012, 22:33
Из текущих секунд доставать, например
Эй, каких секунд, надо же Seed random.
strangedk
27.03.2012, 23:15
прощу прощения, прочитал как "мне нужен мега случайный рандомайзер" :)
естественно выглядящий
А можно более формализированные критерии?
Конечно...
Выше упомянотому генератору ставлю вероятность выпадения нужного числа 0.000026% что равно 1/3841314.
Делаю цикл из 3841314 итерации, и смотрю сколько раз выпало число меньше 0.000026, и это число выпадает больше 1 раза, я бы даже сказал больше 30 раз. Как то многовато. В среднем от 20-40. Хотелось бы видеть значение максималбно приближенное к 1.
Я не уверен откуда алгоритм, но есть предчувствие, что в оригинале использовался double а не float. Поэтому и результат такой.
А нужно это для криптографии, или для просчета каких-нибудь игровых вещей, где предсказуемость не играет роли? Я просто думал, а что если просто найти один сид, который удовлетворяет условию и его и использовать, если конечно, предсказуемость не важна.
Да нет, как в оригинале (http://lab.polygonal.de/?p=162).
Играет роль, сид генериться случайно, по другому алгоритму. Так что подобрать идеальный сид... нет.
Добавлено через 1 час 23 минуты
PS: Что-то я наврал, по поводу выпадения "В среднем от 20-40" при шансе 1/3841314. До этого считал на глаз, значений было больше 5 и я уже даже не сильно обращал внимание на точное кол-во. Сейчас посчитал точно, и все генераторы в среднем выдают от 90-110 выпадений, при шансе 1/3841314. Лучшие выдают от 90-100.
И решение как бы очевидное, чтобы получить шанс 1/3841314, надо просто пороговое значение (0.000026%) разделить еще на 100, и получаю то что надо. Но вот только я задумался, а в жизни то как, может 100 раз выпадение это так и должно быть? Бред...
http://en.wikipedia.org/wiki/Xorshift
Лучшие выдают от 90-110.
Они правы!
Вы не учитываете, что 1 == 100%, отсюда и проблема. 1/3841314 == 0.000026 == 0.0026%
Они правы!
Вы не учитываете, что 1 == 100%, отсюда и проблема. 1/3841314 == 0.000026 == 0.0026%
Конечно же. Спасибо большое. Только не в ту сторону точку сдвинули.
http://en.wikipedia.org/wiki/Xorshift
Он тоже был в списке проверяемых.
Еще такой вариант - http://www.jstatsoft.org/v08/i14/paper
Только не в ту сторону точку сдвинули.
Ой! Неправильно скопировал, там на пару нулей везде больше должно быть.
1/3841314 == 0.00000026 == 0.000026%
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.