Название: вопросы по функции qrand(); Отправлено: Alexu007 от Март 10, 2014, 21:24 1. выдаёт (по умолчанию) случайные числа в диапазоне 0 - 32767, что как-то маловато, хотелось бы как минимум половину int.
2. При вызове диалога выбора файла QFileDialog::getOpenFileName происходит "несанкционированная" инициализация ГСЧ случайным числом. Никак не мог понять где косяк, почему без инициализации не получается одна и та же последовательность - для отладки. Название: Re: вопросы по функции qrand(); Отправлено: gil9red от Март 10, 2014, 22:18 Цитировать 1. выдаёт (по умолчанию) случайные числа в диапазоне 0 - 32767, что как-то маловато, хотелось бы как минимум половину int. http://doc.qt.digia.com/4.6/qtglobal.html#qrandЦитировать Returns a value between 0 and RAND_MAX (defined in <cstdlib> and <stdlib.h>), the next number in the current sequence of pseudo-random integers. Цитировать /* Ничего с этим не поделаешь :)* RAND_MAX is the maximum value that may be returned by rand. * The minimum is zero. */ #define RAND_MAX 0x7FFF По второму пункту не понятно. Надо бы кода :) Название: Re: вопросы по функции qrand(); Отправлено: m_ax от Март 11, 2014, 09:22 А кроме qrand() ничего уже нет?
Код
Название: Re: вопросы по функции qrand(); Отправлено: Igors от Март 11, 2014, 14:00 Цитировать /* * RAND_MAX is the maximum value that may be returned by rand. * The minimum is zero. */ #define RAND_MAX 0x7FFF Код
1. выдаёт (по умолчанию) случайные числа в диапазоне 0 - 32767, что как-то маловато, хотелось бы как минимум половину int. Так склейтеКод
А кроме qrand() ничего уже нет? А можно обойтись и куда более скромными средствами, напрКод
Код
Название: Re: вопросы по функции qrand(); Отправлено: m_ax от Март 11, 2014, 14:28 Цитировать Так склейте Это плохое, неэффективное решение.. Во-первых лишний вызов qrand, во-вторых, хз как это отразиться на качестве псевдослучайной последовательности. В-третьих, если потребуется изменить диапазон, то вновь потребует лишние телодвижения.. Код
Никаких преимуществ у этого решения перед тем, что предлагает stl нет, лишь напротив.. Цитировать А можно обойтись и куда более скромными средствами, напр Это уже костыль, и не понятно какое отношение это имеет к генераторам и распределениям в std::Код
Название: Re: вопросы по функции qrand(); Отправлено: Igors от Март 11, 2014, 16:11 Никаких преимуществ у этого решения перед тем, что предлагает stl нет, лишь напротив.. Преимущество громадное - обойтись без всего того страхомудия которым Вы забиваете себе голову :) Диапазон решается напр такКод
хз как это отразиться на качестве псевдослучайной последовательности. Усиленное запоминание std не компенсирует пробелов в фундаментальных знаниях. Название: Re: вопросы по функции qrand(); Отправлено: m_ax от Март 11, 2014, 16:27 Преимущество громадное - обойтись без всего того страхомудия которым Вы забиваете себе голову :) Откровенная чушь. Видимо, как следствие комплексов и фобий перед механизмами и решениями stl, boost и т.д.. Т.е. вы действительно не понимаете, почему вариант stl более гибок и эффективен, чем предложенное вами страхомудия? Цитировать Усиленное запоминание std не компенсирует пробелов в фундаментальных знаниях. Пафоса то, пафоса ;DНазвание: Re: вопросы по функции qrand(); Отправлено: Old от Март 11, 2014, 16:28 Усиленное запоминание std не компенсирует пробелов в фундаментальных знаниях. Вы наконец открыли для себя Кнута? Похвально.А объяснить сможете что происходит в этом коде? Ну с вашими фундаментальными знаниями это должно быть не сложно. :) Название: Re: вопросы по функции qrand(); Отправлено: Igors от Март 11, 2014, 19:11 Откровенная чушь. Видимо, как следствие комплексов и фобий перед механизмами и решениями stl, boost и т.д.. Неужели Вы настолько наивны и полагаете что я придумал эти числа? :) Конечно нет, этим простеньким генератором я пользуюсь с начала 90-х. Так зачем мне цеплять "нечто" и потом с ним возиться? Не говоря уже о том что проект может быть и не совместим с С++ 11. Если просто - то значит плохо? Чем? Может тем что я вынужден таскать с собой переменную seed - ну так ведь и Ваш вариант не thread-safe (поправьте если не так). Ой, щас пойдет в ход что-то типа "thread_local" :) Т.е. вы действительно не понимаете, почему вариант stl более гибок и эффективен, чем предложенное вами страхомудия? Откуда такая уверенность что "вариант stl более гибок и эффективен"? На деле это может оказаться совсем не так. Давно хотел пощупать вариации "cellular" где довольно интенсивный рандом, интересно - расскажу. Название: Re: вопросы по функции qrand(); Отправлено: Old от Март 11, 2014, 19:19 Неужели Вы настолько наивны и полагаете что я придумал эти числа? Нет, не думаем. И Кнута вы к сожалению не открыли. Так, нашли один из вариантов в интернете...Да, серьезные фундаментальные знания, впрочем как всегда. :) Так зачем мне цеплять "нечто" и потом с ним возиться? А вот если бы вы открыли Кнута, то узнали для себя, что генераторы сильно отличаются по качеству. :)Название: Re: вопросы по функции qrand(); Отправлено: Alexu007 от Март 11, 2014, 20:19 По второму пункту не понятно. Надо бы кода :) Код
Вот так при нажатии кнопки выдаёт одну и ту же последовательность псевдостучайных чисел. Что правильно, т.к. нет иниалицизации ГСЧ случайным числом. Но если вызвать меню выбора файла - в коде оно закомментировано - то при нажатии кнопки ессно выскочит это меню (можна выбрать любой файл или вообще ничего не выбирать - пофиг). И после меню каждый раз будет разная последовательность псевдослучайных чисел. На мой взгляд небольшой глючок - где-то в коде меню инициализируется ГСЧ. Я просто никак не мог понять, чего это ГСЧ у меня баловать начал... Проблему больших чисел решил просто: перемножил два соседних случайных числа. Качество последовательности меня не очень интересует, но нужно чтобы диапазон был больше. Название: Re: вопросы по функции qrand(); Отправлено: Bepec от Март 11, 2014, 23:33 Вопрос а зачем вам неслучайная случайная последовательность чисел?
PS вариант "для отладки" не катит. Для отладки сделайте там ifdef и выдавайте числа от 0 до N. Название: Re: вопросы по функции qrand(); Отправлено: Alexu007 от Март 11, 2014, 23:48 Как раз таки для отладки. Но в общем это легко обходится - после вызова меню файла нужно переинициализировать ГСЧ любым неслучайным числом. Тогда последовательность цифр снова станет повторяющейся.
Название: Re: вопросы по функции qrand(); Отправлено: Igors от Март 12, 2014, 06:58 На мой взгляд небольшой глючок - где-то в коде меню инициализируется ГСЧ. Я просто никак не мог понять, чего это ГСЧ у меня баловать начал... Или просто "используется". Thread-safe реализация гарантирует что последовательность та же самая независимо от вызовов в до нитках. Но что вызов ф-ции Qt не изменит расклад в текущей - этого никто не обещал.Проблему больших чисел решил просто: перемножил два соседних случайных числа. Качество последовательности меня не очень интересует, но нужно чтобы диапазон был больше. Хоть диапазон и больше, но так маленькие числа будут выпадать часто, а большие - редко. Распределение перестало быть равномерным |