![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
полнейший бред, показывающий незнание теории. взяли системное время - там допустим 20.5 случайных бит, провели с ним любое количество операций, получили либо те же 20.5 бит, либо например 18.1 бит, т.к. что потеряли. Это сообщение отредактировал(а) GoldFinch - 20.6.2009, 19:21 |
|||
|
||||
Леопольд |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Вы уверенны? Сколько итераций провели для выяснения? ![]() rX - число полученное от генератора. 3 + r0 % 7 = 3 3 + r6 % 7 = 9 отрезок [3,9] а не [5,9] Пока считал, нашёл ошибку у себя, надо единичку добавить, а то не получается нужный отрезок. Следовательно, правильный алгоритм такой:
abs возвращает абсолютную величину числа, если припомнить алгебру то |-7| = |7| = 7. 3 + r0 % (|7 - 3| + 1) = 3 + 0 = 3 3 + r4 % (|7 - 3| + 1) = 3 + 4 = 7 3 + r6 % (|7 - 3| + 1) = 3 + 1 = 4 все числа в заданном отрезке. На всякий случай следует попробовать с отрицательным числом [-3,7]: -3 + r0 % (|7 - (-3)| + 1) = -3 + 0 = -3 -3 + r10 % (|7 - (-3)| + 1) = -3 + 10 = 7 -3 + r11 % (|7 - (-3)| + 1) = -3 + 1 = -2 Пробуем для отрезка [3,-7] 3 + r0 % (|-7 - 3)| + 1) = 3 + 0 = 3 3 + r10 % (|-7 - 3)| + 1) = 3 + 10 = 13 Увы и ах, не фурычит. Но можно сделать так, что-бы зафурычило, уверяю Вас, но оставлю и Вам маленько, извилины поразмять... Это сообщение отредактировал(а) Леопольд - 20.6.2009, 20:37 -------------------- вопросов больше чем ответов |
||||
|
|||||
Леопольд |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Ладно, не буду томить.
Совсем правильный алгоритм, не зависящий от порядка такой:
Вот теперь, надо тестировать, хотя тесты лучше писать до кода ![]()
-------------------- вопросов больше чем ответов |
||||
|
|||||
zim22 |
|
||||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
у вас тесты не полные. проверяются только границы диапазона. посмотрите, что получится в этом случае: ![]()
*** и неплохо бы ГПСЧ запустить
Это сообщение отредактировал(а) zim22 - 21.6.2009, 10:25 |
||||
|
|||||
Irdis |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 21.5.2008 Репутация: нет Всего: 1 |
скажем так, для нужд народного хозяйства моего метода хватит
полнейший бред Это сообщение отредактировал(а) Irdis - 21.6.2009, 12:01 |
||||
|
|||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
ок, обосную. Допустим мы получаем время с точностью до 1/1024 сек, интенсивность использования ГСЧ 1 Гц, тогда в идеальном случае мы имеем 10 случайных бит, распределение будем считать равномерным. Т.е. в среднем каждую секунду запрашивая время мы получаем число у которого младшие 10 двоичных разрядов заранее неизвестны (случайны), а старшие известны и постоянно увеличиваются. Тогда отбросив старшие разряды мы получаем случайное число которое может принять одно из 1024 значений, от 0 до 1023 Проведя с ним какуюто последовательность операций, мы для каждого конкретного числа x1 получаем какоето другое число y1=f(x1). Если для каждого x, y не повторяются, то информация не теряется, и мы для 1024 разных x получаем 1024 разных y. Если какието y повторяются, например 220 одинаковых, то мы для 1024 разных x получим 804 разных y, 9.651бит, - информация потеряется. И на в каком случае, мы не получим большее количество y чем x. литература: http://ru.wikipedia.org/wiki/%D0%98%D0%BD%...%BF%D0%B8%D1%8F Это сообщение отредактировал(а) GoldFinch - 21.6.2009, 13:01 |
|||
|
||||
Irdis |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 21.5.2008 Репутация: нет Всего: 1 |
убедительно, но всё таки:
Если мы можем получить хотя бы один байт случайной информации то из них не трудно склепать 1Гб случайной информации. ко времени можно также прибавить другие изменяющиеся данные (зависит от фантазии) также добавить в формулу рекуррентные соотношения(тогда даже если время начнёт повторяться ![]() В любом случае это не полный бред. Это сообщение отредактировал(а) Irdis - 21.6.2009, 18:37 |
|||
|
||||
Леопольд |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
На самом деле, такая функция даже не сгенерит ни бита бинарного кода, потому что она бессмысленна. Думаю, даже gcc оптимизатор не пропустит ![]() Вопрос был у человека, получать числа в заданном диапазоне. Т.е. значение, возвращаемое функцией rand_range не должно выходить за него. Будет совсем не то что надо... ![]() Генератор, думаю, надо инициализировать до вызова этой функции. Это сообщение отредактировал(а) Леопольд - 21.6.2009, 20:09 -------------------- вопросов больше чем ответов |
||||
|
|||||
zim22 |
|
||||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
вы тесты зачем привели? чтобы проверить, что числа находятся в нужном диапазоне, правильно? я вам привёл пример, на котором ваши тесты бесполезны. смысл тогда от них? ![]()
так осмысленней?
Это сообщение отредактировал(а) zim22 - 21.6.2009, 20:35 |
||||
|
|||||
natusik86 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 25.5.2009 Репутация: нет Всего: нет |
Я даже не думала, что мой вопрос вызовет столь бурное обсуждение. Вообще говоря, пока я ждала ответов, сумела сама написать функцию. Уж не знаю кому как, но у меня работает и мне достаточно.
|
|||
|
||||
codelord |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 777 Регистрация: 7.5.2005 Где: ты моя темноглаза я где?! Репутация: 1 Всего: 39 |
А если так ![]()
|
||||||
|
|||||||
Леопольд |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Смысл очень прост - requirements verification. Стоит задача, написать функцию возвращающую рандомное значение в заданном диапазоне, а не протестировать распределение функции std::rand. Не надо усложнять. Тесты я привёл для того что-бы показать natusik86 что функциональность надо тестировать. Но я обратил более пристальное внимание на тесты и понял что хватит трёх вместо всех тех.
Это сообщение отредактировал(а) Леопольд - 22.6.2009, 09:01 -------------------- вопросов больше чем ответов |
||||
|
|||||
Леопольд |
|
||||||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Чем проще функция тем лучше. Кому как, а я бы воспользовался этим ![]()
А если так, то что получится для [1,0]? Попробуйте прогнать через это:
Это сообщение отредактировал(а) Леопольд - 22.6.2009, 09:00 -------------------- вопросов больше чем ответов |
||||||||||
|
|||||||||||
codelord |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 777 Регистрация: 7.5.2005 Где: ты моя темноглаза я где?! Репутация: 1 Всего: 39 |
Леопольд,
не надо через задницу задвавать диапазон, и если ты взял логику из моей функции дописал туда swap и удалил переменную и гордится этим ты облажался со своим abs он здесь не нужен.
вот этот вариант я имею ввиду. И не надо предлагать мне использовать твои кривые тесты, писать научись. |
|||
|
||||
Леопольд |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
"Надо Федя, надо." А если оторвёшь взгляд от себя любимого, то, возможно, заметишь что эту функцию я написал раньше. Но не я изобрел алгебру и потому никак не могу обвинить тебя в плагиате...
Вот abs не нужен, не спорю, но и ошибки он не вызавал, просто подтормаживал выполнение функции. Но мне не пришлось долго напрягаться что бы это выяснить. Я просто удалил его, когда появились сомнения, и прогнал через тесты. Т.е. мне теперь не надо долго думать, что же я написал, если тесты написанны достаточно п'олно и проверяют то что мне надо. Это их единственное предназначение. Ты же облажался со swap'ом. Я бы с интересом посмотрел как ты мою фукнцию "уронишь", как я твою. Может она в распределённых системах будет вызывать ошибку? ![]() Я (как автор функции) может и не задам кривой диапазон, некоторое время. А вот через год, или два, я, теоретически, сам стану юзером своей функции, и могу забыть что я не предусмотрел того что отрезок/диапазон можно задать и справа-налево, т.е. от большему к меньшему. Или надо программировать асболютно бездумно и не учитывать что на вход могут прийти не все reqirements в силу того что их автор мог просто упустить некоторые детали? А используя свои "кривые" тесты, я значительно ускорю любое изменение. Причём, можно эти тесты подцепить к assert или к #define DEBUG. Этакий unitary testing.
Почему "кривые"? Хотелось бы услышать какое-то обоснование а не голословный тявк. Если можешь написать, то напиши "ровные", а если не можешь то просто промолчи, это лучше чем тявкать на "кривые". И съёшь что-то от "озверина", например "мышьяк" ![]() Как заключение, я не хотел бы работать с таким самодовольным типом как ты в одной команде. Это сообщение отредактировал(а) Леопольд - 22.6.2009, 12:59 -------------------- вопросов больше чем ответов |
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |