Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/34: Рейтинг темы: голосов - 34, средняя оценка - 5.00
2 / 2 / 1
Регистрация: 12.02.2018
Сообщений: 48

Сгенерировал 100000 точек в рандомных позициях. Почему они чаще выбирают верх слева?

17.10.2018, 00:34. Показов 7227. Ответов 37
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Красный - много точек
Оранжевый - немного точек
Жёлтый - минимум точек


Функция рандома:
C++
1
2
3
4
int randInRange(int min, int max)
    {
        return min + rand() % (max - min + 1);
    }
Как я генерировал позиции для каждой из точек:
C++
1
float pos[2] { float(randInRange(-10000, 10000)) / 12000, float(randInRange(-10000, 10000)) / 12000 }
Просто интересно знать, почему генерация делиться на 4 секции и почему рандом не совсем рандомный
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.10.2018, 00:34
Ответы с готовыми решениями:

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

Почему администраторы выбирают библиотеку на ленте, а не на оптическом носителе?
почему администраторы при организации резервного копирования выбирают библиотеку на ленте а не на оптическом носителе? например есть...

Создания рандомных точек в GraphABC
Здравствуйте. Нужно создать программу,которая ставит точки в рандомных местах с рандомным цветом. for n:=1 to 9999 do begin ...

37
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,405
18.10.2018, 21:02
Лучший ответ Сообщение было отмечено DrOffset как решение

Решение

Студворк — интернет-сервис помощи студентам
Цитата Сообщение от forprix Посмотреть сообщение
Просто интересно знать, почему генерация делиться на 4 секции и почему рандом не совсем рандомный
Потому что, очевидно, на вашей платформе величина RAND_MAX является относительно небольшой по сравнению с размером диапазона, который вы пытаетесь генерировать. Например, в стандартной библиотеке Visual Studio ширина диапазона rand() равно 32768, а ширина генерируемого вами диапазона - 20000. Вот именно часть, соответствующую доле 20000 внутри 32768 вы и видите в виде квадрата, более плотно заполненного значениями.

Способ конвертации диапазонов через оператор % ни в коем случае нельзя применять, когда ширина целевого диапазона приближается к RAND_MAX и не является делителем RAND_MAX + 1.

То есть rand() тут ни в чем не виноват - накосячили исключительно лично вы. С таким же успехом вы могли запросить от своей randInRange значения от 0 до 100000 и с "удивлением" бы обнаружили, что числа выше 32767 вообще не генерируются.

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

Например, простейшим способом построим на базе все того же rand() генератор с более широким диапазоном

C++
1
2
3
4
5
int randInRange(int min, int max)
{
  long long r = (long long) rand() * (RAND_MAX + 1) + rand();
  return min + r % (max - min + 1);
}
и сразу же получим ваши 100000 точек
Миниатюры
Сгенерировал 100000 точек в рандомных позициях. Почему они чаще выбирают верх слева?  
1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,405
18.10.2018, 21:51
Лучший ответ Сообщение было отмечено DrOffset как решение

Решение

Цитата Сообщение от агерон Посмотреть сообщение
и посмотри на картинку TC а потом попытайся связать в своем сознании почему хреновый линейный конгруэнтный ГПСЧ не может здесь применяться
Посмотри на скриншот в моем посте, который был сгенерирован правильным применением того же самого линейного конгруэнтного ГПСЧ.

Тут смешно даже дискутировать: в таком тривиальном вопросе, как равномерное заполнения прямоугольного поля псевдослучайными точками никаких продвинутых ГПСЧ не нужно. И рассказывать традиционные байки про "качественные ГПСЧ" в связи с этой темой - дешевая профанация.

Цитата Сообщение от агерон Посмотреть сообщение
проблема в плохой мат функции операции rand() которая определенна в библиотеке stdlib.h
Не надо гнать в форум всякий бред. Никаких проблем в функции rand(), для ее сферы применения, нет и никогда не было. В данном случае мы имеем дело не с криптографией и не с симуляцией научных экспериментов, а с обычным тривиальным использованием функции rand() для равномерного заполнения прямоугольного поля точками - это вполне в пределах ее области применимости.

Результат вызван наивной и часто встречающейся ошибкой автора кода, как описано в моем ответе выше, а не какими-то проблемами в rand(). Автор пытается рассадить четырех голубей по трем гнездам и искренне удивляется, что все время получается "неравномерно".

Цитата Сообщение от агерон Посмотреть сообщение
Manowar, я просто оставлю картинку из твоего поста здесь, может так до hoggy дойдет что функция rand() хреновая
Ни слова о том, что "функция rand() хреновая" в этой картинке нет. В этой "картинке" описаны лишь типичные ошибки, допускаемые начинающими программистами при использовании функции rand(). В данном случае мы как раз и наблюдаем одну из классических таких ошибок.

Посылка "функция хреновая потому, что новички все время неправильно ей пользуются", возможно, вполне оправдана в рамках учебников для начинающих. И этот форум, согласно его названию, посвящен именно начинающим. Но тем не менее в этой теме мы рассматриваем вполне конкретное поведение программы, которое является следствием ошибки/заблуждения автора кода, а не какой-то "хреновости" rand().
1
694 / 304 / 99
Регистрация: 04.07.2014
Сообщений: 851
18.10.2018, 22:24
Цитата Сообщение от hoggy Посмотреть сообщение
своими руками коэнгурентные рандомы ваял.


Ваш код выше не доказывает ничего. Вы показали что реализация rand в вашем компиляторе проходит один единственный тест. Классическая проблема для ЛКМ - спектральные тесты. У ТС как раз его следствие. Если что смотрим RANDU.
0
738 / 705 / 110
Регистрация: 29.05.2015
Сообщений: 4,356
18.10.2018, 22:25
Цитата Сообщение от TRam_ Посмотреть сообщение
Потому и пользуются в качестве первого приближения случайности именно псевдослучайными последовательностями, которые для базовых задач вполне достаточны. Для этой - недостаточны.
Во первых, 20000х20000 точек не нарисуешь ни на одном мониторе, даже если рисовать во весь экран. По любому будут какие-то ограничения изображения. Но даже для этой безумной задачи обычного rand достаточно, т.к. он имеет базу (выдаёт неповторяющиеся значения) 0xffff ffff, т.е. 4 миллиарда, а 20000*20000 будет всего 400 000 000, так что ещё и запас остаётся.

Функция:

C++ (Qt)
1
float pos[2] { float(randInRange(-10000, 10000)) / 12000, float(randInRange(-10000, 10000)) / 12000 }
какая-то безумная. Для задания координат точек требуются целые переменные, а вовсе не с плавающей точкой. Числа, выдаваемые этой функцией, всегда будут положительные или отрицательные, но меньше единицы (9999/12000). Где вы видели отрицательную меньше единицы координату точки на экране? Афтор чё-то накрутил несуразное, а вы делаете далеко идущие выводы о лажовости rand.

Я уверен, что даже если в полноэкранном приложении (разрешение экрана моего ноутбука 1366х768) начать нормальным кодом с использованием обычного rand зарисовывать случайные точки - то они расположатся вполне себе случайно, без каких-либо узоров.

Более того, если обычной линейной конгруэнтной функцией (с хорошими коэффициентами) делать то же самое - результат будет тот же.

Могу это продемонстрировать, но с использованием Qt, т.к. приложение графическое.
0
 Аватар для Nishen
1359 / 857 / 366
Регистрация: 26.02.2015
Сообщений: 3,831
18.10.2018, 22:52
alexu_007, ты мне напоминаешь Fulcrum_013.
0
738 / 705 / 110
Регистрация: 29.05.2015
Сообщений: 4,356
18.10.2018, 23:07
Не знаю такого.
0
 Аватар для агерон
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
18.10.2018, 23:22
TheCalligrapher, т. е. мы будем колоться и жрать кактус но утверждать что стандартная функция rand() валидна? ок...

только почему то сами TheCalligrapher и предложили усиленную версию этой функции в попытке избежать бага базовой - прелессно вместо того что бы просто использовать стандартный ГПСЧ от Джорджа Марсаглии функцию mwc() как предложил я в первом посте или веретено мерсена aka std::mt19937 как и предлагал sourcerer во втором

а так да... функция rand() валидна... для генерации подбрасывания кубика

Добавлено через 10 минут
кстати если вы гонитесь за скоростью можно использовать алгорит xor128 от того же Джорджа Марсаглии, он раз в 5 быстрее функции mwc()

C++
1
2
3
4
5
6
7
8
9
10
unsigned long xor128()
{
static unsigned long x=123456789,
y=362436069,
z=521288629,
w=88675123;
unsigned long t;
t=(x^(x<<11));x=y;y=z;z=w;
return(w=(w^(w>>19))^(t^(t>>8)));
}
я думаю 7 строчек кода не большая цена для статистически верного ГПСЧ

P. S. если кому интересно вот статья на Википедии про Джорджа Марсаглию, но надо уметь в английский
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,405
19.10.2018, 00:08
Цитата Сообщение от агерон Посмотреть сообщение
TheCalligrapher, т. е. мы будем колоться и жрать кактус но утверждать что стандартная функция rand() валидна?
Чего? Стандартная функция rand() вдруг стала "не валидной"? Маразм крепчал...

Цитата Сообщение от агерон Посмотреть сообщение
только почему то сами TheCalligrapher и предложили усиленную версию этой функции в попытке избежать бага базовой
Чего? Я предложил исправленную версию ТС-вской функции randInRange, чтобы избавить ее от ТС-овского бага, присутствовавшего в оригинальной версии функции randInRange. В rand() же никакого бага нет.

Заодно не оставлю и камня на камне от вашего странного утверждения об некоем "усилении": всем понятно, что генерация ПСЧ в моей версии функции по-прежнему делается линейным конгруэнтным методом. Я лишь расширил разрядность генератора. То есть в моем варианте по-прежнему используется классический rand(). (Постарайтесь в будущем не делать таких вот бессмысленных вбросов, чтобы мне не пришлось тратить не постановку вас на место.)

Для интересующихся: "пионерские" байки про какие-то "баги" в rand() пошли из старой истории про непродуманный выбор параметров в старинной BSD-шной версии стандартной библиотеки (https://www.researchgate.net/p... Structures). Это байки из категории "это было давно и неправда".

С таким же успехом вы нам тут можете рассказывать про "баги" и "невалидность" операции деления в языке С++, которая утверждает, что 2 / 5 дает 0.

Цитата Сообщение от агерон Посмотреть сообщение
прелессно вместо того что бы просто использовать стандартный ГПСЧ от Джорджа Марсаглии функцию mwc() как предложил я в первом посте или веретено мерсена aka std::mt19937 как и предлагал sourcerer во втором
О это очень просто: перечитайте исходный вопрос. Ответ на этот вопрос совершенно элементарен и не имеет никакого отношения ни к Джорджу Марсаглии, ни к Гойко Митичу, ни к каким либо ГПСЧ вообще. Автор вопроса просто совершил элементарную программистскую ошибку, не понимая, что делает.

Вы же сразу бросились, образно выражаясь, "искать, где светло, а не там, где потеряли": нести постороннюю чушь про какие-то воображаемые проблемы с rand(), а когда исправлять наспех наговоренную белиберду стало поздно, принялись флудить тему посторонними иррелевантными разглагольствованиями.

Цитата Сообщение от агерон Посмотреть сообщение
а так да... функция rand() валидна... для генерации подбрасывания кубика
Именно подбрасыванием кубика мы тут и занимаемся. И умеем делать это правильно при помощи любого ГПСЧ.

Цитата Сообщение от агерон Посмотреть сообщение
кстати если вы гонитесь за скоростью можно использовать алгорит xor128 от того же Джорджа Марсаглии, он раз в 5 быстрее функции mwc() P. S. если кому интересно вот статья на Википедии про Джорджа Марсаглию, но надо уметь в английский
Джорджа Марсаглию я отправил домой с этого праздника жизни, предварительно извинившись за необоснованное беспокойство
0
309 / 221 / 74
Регистрация: 23.05.2011
Сообщений: 981
19.10.2018, 00:10
ТС, попробуй так:
C++
1
2
3
4
5
6
// min включаем, max нет
int randInRange(int min, int max)
{
     const int mult = max - min;
     return min + (int)(((double)rand())/RAND_MAX*mult + 0.5);
}
Хотя вариант The Calligrapher правильнее.
1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,405
19.10.2018, 00:30
Цитата Сообщение от New man Посмотреть сообщение
ТС, попробуй так:
C++
1
2
3
4
5
6
// min включаем, max нет
int randInRange(int min, int max)
{
     const int mult = max - min;
     return min + (int)(((double)rand())/RAND_MAX*mult + 0.5);
}
Это то, что имел в виду под "Можно выполнить конвертацию диапазонов делением, а не остатком, что даст более "равномерную" картину,...".

Кстати, для задачи равномерного заполнения плоскости точками получается вполне приемлемый результат. Исходная проблема распределения присутствует и в этом варианте, но "размазана" по плоскости более равномерно.
0
309 / 221 / 74
Регистрация: 23.05.2011
Сообщений: 981
19.10.2018, 00:54
TheCalligrapher, мой вариант хорош, если диапазон <= RAND_MAX.
Если больше, то мой вариант не будет выдавать некоторые значения, а твой вариант со складыванием приведёт к треугольному распределению, а в пределе к нормальному (если не ошибаюсь).
http://sci.alnam.ru/book_dsp.php?id=28
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,405
19.10.2018, 01:14
Цитата Сообщение от New man Посмотреть сообщение
а твой вариант со складыванием приведёт к треугольному распределению
Вы невнимательно посмотрели на мой вариант. У меня нет никакого "складывания". У меня происходит фактическая конкатенация двух псевдослучайных чисел. Обратите внимание, что я умножаю результат одного из вызовов на RAND_MAX + 1.

Для платформы с RAND_MAX == 32767 (то есть 15 псевдослучайных битов) я фактически сделал

C++
1
long long r = ((long long) rand() << 15) + rand();
то есть сконкатенировал две 15-битные псевдослучайные двоичные вереницы в одну 30-битную вереницу. Полученное значение будет равномерно распределенным на диапазоне [0, 230) при условии равномерного распределения исходных верениц. То есть никакого ни треугольного, ни нормального распределения тут нет. Распределение - равномерное.
0
 Аватар для Kuzia domovenok
4268 / 3328 / 926
Регистрация: 25.03.2012
Сообщений: 12,545
Записей в блоге: 1
19.10.2018, 01:44
агерон, ты зря гонишь на hoggy, ты упёрся в свои статьи о степени псевдости в псевдослучайности и про то как бородатые дядьки криптографы в своих бородацых тестах её ломают, вместо того, чтобы спуститься в реальный мир к проблемам ТСа, у которого не суперпупер шифроалгоритм в абсолютно белом шуме нуждается, а надо просто чёртов экран плюс-минус равномерно пикселями заполнить!
Какие, к дьяволу, проблемы конгруэнтных ГПСЧ? Да я если просто из функции clock() напрямую числа буду брать для точек, у меня экран равномернее заполнится!

У меня всё сильнее возникает чувство, что флуд о разных способах ГСПЧ тебе более интересен, чем конкретная программа автора...

Добавлено через 6 минут
Отвечаю на вопрос автора. Ваша проблема в том, что RAND_MAX=30000
в малых диапазонах остаток от деления rand() скажем на 100 всегда случаен.
остаток же от деления rand() на почти 60% от RAND_MAX уже вполне предсказуем.
провельте генерацию координат типа rand()*rand()%(max-min)

Добавлено через 3 минуты
TheCalligrapher, ой, прости меня пожалуйста, не прочитал вторую страницу темы. Думал, заскочу на белом коне с ответом в этот эпичный срач о кознгрунуэных ГСПЧ, начатый агероном, жаль опоздал, не видел второй страницы.
0
 Аватар для агерон
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
19.10.2018, 05:07
Kuzia domovenok

У меня всё сильнее возникает чувство, что флуд о разных способах ГСПЧ тебе более интересен, чем конкретная программа автора...
Отвечаю на вопрос автора. Ваша проблема в том, что RAND_MAX=30000
в малых диапазонах остаток от деления rand() скажем на 100 всегда случаен.
остаток же от деления rand() на почти 60% от RAND_MAX уже вполне предсказуем.
Это ПЯТЬ!!!! Kuzia domovenok, вообще-то 60% верных результатов это кхм... как бы сказать не очень удовлетворительно для любых задач вот тебе бы понравилось если бы ты получил только 60% от зарплаты?

TheCalligrapher меня это умиляет , я написал свой линейный конгруэнтный генератор расширенной разрядности на основе бажного стандартного, но продолжаю утверждать что функция rand() из стандартной поставки компилятора валидна.... про процент валидности этой фукции красноречиво написал Kuzia domovenok

как вы не понимаете ГСПЧ работающий на 60% диапазона это как бы по мягче сказать.... осетрина второй свежести

ГСПЧ обязан!!! выдавать валидные значения на 100% доступного диапазона, и при этом проходить diehard тесты, все остальное от лукавого, и если генератор не удовлетворяет подобным условия это не ГСПЧ а что-то на него похожее, и никак иначе, да подобная функция может применяться в учебных задачах в качестве замены валидного ГСПЧ если нет альтернативы, как к примеру в 70 годах 20 столетия когда по сути и возник метод линейного конгруэнтного генератора, т. к. на тот момент не знали ему альтернатив, но в современных условиях его использование очень сильно ограниченно даже в учебных целях т. к. валидный статестический генератор занимает 5-7 строк кода на С++

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

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

P. S. ради справедливсти я тоже люблю писать велосипеды и частенько стараюсь их защитить и переиспользывать

но суть то в другом... доказывая всем, а впервую очередь начинающим что можно использывать бажные инструменты вы совершаете системную ошибку как в обучении начинающих так и в разработке ПО, начинающие должны знать о проблемах и границах пременимости стандартных инструментов, а также о валидных заменах ошибочных инструментов к коим и относиться стандартная реализация функции rand в компиляторе. Именно поэтому, из-за 60% пременимости к диапазону стандартная rand() и являеться плохой математической функцией в задаче метода монте-карло которую и пытаеться решить TC

TheCalligrapher кстати мы кидаем не просто "кубик" в задаче TC, а 2 "кубика" что собой являет 2-x мерное распределение по x и y ординате, и с учетом этого для стандартной функции rand() все совсем грустно

Кстати к вопросу об усилении функции, по сути ты написал генератор 2 поколения на основе генератора 1 поколения с учетом пост знания об ошибке генератора 1 поколения, но ведь ошибка генератора первого поколения осталась!!! ты ведь не переписал стандартную функцию rand()

c помощью пост знания об ошибке генератора 1 поколения ты просто написал усиленный генератор 2 поколения, который генерирует данные в тех же пределах 60% от максимального диапазона, но системную ошибку стандартного генератора так и не решил, а просто расширил диапазон чтобы 60% валидного диапазона с лихвой покрывали требуемый диапазон точек TC, подобное усиление функции не всегда являеться допустимым т. к. зачастую не решает системных ошибок!!!

а вот статистически валидные ГСПЧ на данный момент не проявляют подобных системных ошибок, вот о чем я веду речь, а не просто о стандартной функции rand()
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,405
19.10.2018, 06:05
Цитата Сообщение от агерон Посмотреть сообщение
на основе бажного стандартного
Зайчик мой, от того, что вы будете постоянно дылдонить нам про какие-то одному вам известные "баги" в стандартном rand(), эти баги там не появятся. Ваши таинственные туманные рассказы про какие-то якобы существующие там "баги" тут никому не интересны. Вам придется либо указать нам на эти баги, либо признать, что вы несли чушь.

Цитата Сообщение от агерон Посмотреть сообщение
ГСПЧ обязан!!! выдавать валидные значения на 100% доступного диапазона,
Функция rand() обязана выдавать валидные значения в диапазоне от 0 до RAND_MAX. Ничего иного от нее никто не требует и не ожидает. Именно это и делает стандартная функция rand(). Никаких нарушений спецификации rand() мы здесь не обнаружили.

Что вы несете?

Цитата Сообщение от агерон Посмотреть сообщение
но ведь ошибка генератора первого поколения осталась
Двойной фейспалм... Тройной. Какая, блин, ошибка??? Где? Кто вам вбил в голову этот бред? Что вы несете?

Цитата Сообщение от агерон Посмотреть сообщение
как вы не понимаете ГСПЧ работающий на 60% диапазона это как бы по мягче сказать.... осетрина второй свежести
"работающий на 60% диапазона"? Какие "60%"? Что вы несете?

Я кажется начинаю понимать. Вы, несмотря на приведенные участниками этой дискуссии детальные (детальнейшие!) объяснения того, что произошло в программе ТС, до сих пор тупо не врубились в эти объяснения. То есть вы до сих пор не поняли, что исходная неравномерность распределения, показанная в первом посте ТС, не имеет никакого отношения ни к каким "багам" в rand(), а является чисто и исключительно особенностью ("багом") кода ТС?

Сорри, молодой человек, пока вы не удосужитесь разобраться в таких элементарных вещах, я буду вынужден классифицировать ваши разглагольствования как тупой троллинг. Nuff said.
0
738 / 705 / 110
Регистрация: 29.05.2015
Сообщений: 4,356
19.10.2018, 07:05
Цитата Сообщение от агерон Посмотреть сообщение
т. е. мы будем колоться и жрать кактус но утверждать что стандартная функция rand() валидна? ок...
Может rand() и не подходит для математики или статистики, но квадрат случайными точками она заполнит. В случае, если общее число точек не превысит 0xffff ffff. А это намного больше задачи топикастера.

То, что у него на экране - это его лажа, а не rand().
0
 Аватар для Kuzia domovenok
4268 / 3328 / 926
Регистрация: 25.03.2012
Сообщений: 12,545
Записей в блоге: 1
19.10.2018, 07:43
агерон,я повторяю вопрос: тебе просто флудить нравится или что?

Добавлено через 2 минуты
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Сорри, молодой человек, пока вы не удосужитесь разобраться в таких элементарных вещах, я буду вынужден классифицировать ваши разглагольствования как тупой троллинг. Nuff said.
я так уже считаю это троллингом. Только даже у троллинга должна быть какая-то цель, кроме скучного генерирования псевдослучайных текстов в треде.
0
738 / 705 / 110
Регистрация: 29.05.2015
Сообщений: 4,356
21.10.2018, 08:40
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Функция rand() обязана выдавать валидные значения в диапазоне от 0 до RAND_MAX. Ничего иного от нее никто не требует и не ожидает.
Функция rand() выдаёт неповторяющиеся последовательности чисел в диапазоне 0xffff ffff. Т.е сами числа от 0 до 0x7fff, но три соседних числа не будут повторяться на более длинной последовательности.

Проверил до 1 000 000, дальше неохота, т.к. уже это работает несколько минут:
Миниатюры
Сгенерировал 100000 точек в рандомных позициях. Почему они чаще выбирают верх слева?  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.10.2018, 08:40

Есть матрица из [100000][100000] как лучше ее представить в голове компьютера)
Всем добрый день. Решил коллективно подумать))) есть матрица из в ней у меня значения 0 или 1 я представил её как char матрицу допустим...

Просуммировать числа, находящиеся на чётных позициях в массиве, если они не равны -5
Задан массив Z(12). Просуммировать числа, находящиеся на чётных позициях в массиве, если они не равны -5. Найти количество таких...

Quicksort, отсортировать элементы массива, стоящие на четных позициях, чтобы они располагались по убыванию
Имеется одномерный массив длиной N = 50. Отсортировать методом быстрой сортировки элементы массива, стоящие на четных позициях, так, чтобы...

Расположить нулевые элементы массива так, чтобы они стояли только на четных позициях
if(fmodf(a,1)!= 0){ a=0; k++; } else ; } printf(&quot;\nkolvo=%d&quot;,k); ...

Найти в массиве целых максимальный и минимальный элементы, посчитать, сколько раз они встречаются и на каких позициях
Найти в массиве целых чисел максимальный и минимальный элементы, посчитать, сколько раз они встречаются и на каких позициях. Массив...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
38
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru