Словил на этом упражнении интересную багофичу. Числа получаются разные, но похожие, как будто реально зависят от времени. Например, запускаем rand() - получаем 25000. Еще раз - 25007, потом 25012, потом 25020. Как будто они привязаны к секундам или еще какой-то большой единице времени. Но если написать еще раз (например, A = rand(); B = rand()) - то B уже получается реально разное.
Для линуксоидов у которых с библиотекой math.h не компилируется: вы при вызове компилятора должны добавить арнумент -lm. Делается это в файле tasks.json
Нужно учитывать что при таком способе генерации вещественных случайных чисел мы будем получать не равномерное распределение вещественных случайных чисел в заданном интервале а случайное вещественное число из "дискретного" набора RAND_MAX вещественных чисел в заданном интервале.
Да, это верно. Если набора RAND_MAX мало, то можно сгенерировать два целых числа, сложить и потом сумму разделить уже на 2*RAND_MAX. А так, в цифровой технике любые вещественные числа ограничены определенным набором.
Если rand() дает числа в диапазоне [0, RAND_MAX] с равномерным распределением, то rand() +rand() даст числа в диапазоне [0, 2*RAND_MAX] , но распределение будет не равномерное. Сумма двух независимых, равномерно распределенных случайных величин имеет треугольную плотность вероятности. На краях диапазона вероятность будет меньше, чем в середине диапазона. Лучше применить выражение rand()+rand()%2*(RAND_MAX+1)
8:15 как же так получается диапазон от [-5 ; 5)? По видимому, программа сначала вычисляет модуль от деления на range (10), а лишь потом от результата отнимает 5. Но ведь приоритет у унарного минуса выше, чем у деления по модулю.
Это не унарный минус, а обычное вычитание, у которого приоритет после операции %. Унарный минус - это знак "-" ,стоящий в начале выражения или сразу после скобки или после знака операции.
Когда рассказывается про scanf, говорилось, что он возвращает количество прочитанных в переменные данных. Исходя из этого, дальше конструируются различные команды с этой функцией. (Фантазию и творчество в программировании никто не отменял).
О, новый видос, он наверняка крутой, давайте в этом убедимся). ***Посмотрел видос*** Да, видос действительно крутой и познавательный, я в этом убедился)
Спасибо! true нужно, чтобы в VSCode при запуске программы можно было что-либо вводить с клавиатуры (т.е. чтобы программа запускалась в терминале, как полноценная)
Доброе время суток !! Подскажите пожалуйста при компиляции такая ошибка "неопределённая ссылка на «sqrt»". Ос Linux Mint. Гуглил, но не понял как решить(((
для компиляции в tasks.json -lm в конце аргументов "args": [ "-std=c99", "-fdiagnostics-color=always", "-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}", "-lm" ],
Интересно, а есть ли генераторы реально абсолютно случайных чисел? Я так понимаю, что все "случайные" числа, которые генерируются ПК - на самом деле не случайны.
Есть спец. чипы, но программно можно только псевдослучайные значения генерировать. Меньшую предсказуемость псевдослучайных последовательностей вносят такие добавления как использование текущего времени, измерения интервалов нажатий клавиш\мышки и т.п. Ну и главное, если подойти философски, то случайных случайностей не бывает в принципе.
в относительно новых процах интел и АМД райзен имеются генераторы случайных чисел (статья на вики "RDRAND"). Для работы с генератором в заголовочном файле immintrin.h есть функция _rdrand32_step, но это уже выше стандарта C99
Словил на этом упражнении интересную багофичу. Числа получаются разные, но похожие, как будто реально зависят от времени. Например, запускаем rand() - получаем 25000. Еще раз - 25007, потом 25012, потом 25020. Как будто они привязаны к секундам или еще какой-то большой единице времени. Но если написать еще раз (например, A = rand(); B = rand()) - то B уже получается реально разное.
спасибо вам большое за труд!
Большое спасибо за видео!
Для линуксоидов у которых с библиотекой math.h не компилируется: вы при вызове компилятора должны добавить арнумент -lm. Делается это в файле tasks.json
Очень спасибо!
Спасибо. Все просто.
Нужно учитывать что при таком способе генерации вещественных случайных чисел мы будем получать не равномерное распределение вещественных случайных чисел в заданном интервале а случайное вещественное число из "дискретного" набора RAND_MAX вещественных чисел в заданном интервале.
Да, это верно. Если набора RAND_MAX мало, то можно сгенерировать два целых числа, сложить и потом сумму разделить уже на 2*RAND_MAX. А так, в цифровой технике любые вещественные числа ограничены определенным набором.
спасибо
Если rand() дает числа в диапазоне [0, RAND_MAX] с равномерным распределением, то rand() +rand() даст числа в диапазоне [0, 2*RAND_MAX] , но распределение будет не равномерное. Сумма двух независимых, равномерно распределенных случайных величин имеет треугольную плотность вероятности. На краях диапазона вероятность будет меньше, чем в середине диапазона. Лучше применить выражение rand()+rand()%2*(RAND_MAX+1)
да, верно, хорошее дополнение!
пока читал твой комментарий хотел очень похожее решение проблемы написать в ответе))))
Вы говорили, что на Linux gcc должен быть установлен. Можете подсказать, где его найти?
Эс-ранд....ох не так мы его в универе называли))
👏👍💥
8:15 как же так получается диапазон от [-5 ; 5)? По видимому, программа сначала вычисляет модуль от деления на range (10), а лишь потом от результата отнимает 5. Но ведь приоритет у унарного минуса выше, чем у деления по модулю.
Это не унарный минус, а обычное вычитание, у которого приоритет после операции %. Унарный минус - это знак "-" ,стоящий в начале выражения или сразу после скобки или после знака операции.
Доброго времени суток! Напомните пожалуйста в каком видео подробно указывается принцип работы =! в функции scanf? Не могу разобраться.
Когда рассказывается про scanf, говорилось, что он возвращает количество прочитанных в переменные данных. Исходя из этого, дальше конструируются различные команды с этой функцией. (Фантазию и творчество в программировании никто не отменял).
О, новый видос, он наверняка крутой, давайте в этом убедимся). ***Посмотрел видос*** Да, видос действительно крутой и познавательный, я в этом убедился)
Этот курс только про Си или можно интерпретировать как курс по плюсам, без ООП?
Си - это база для С++, поэтому вполне можно брать за основу и для плюсов.
@@selfedu_rus Просто у вас есть курс по плюсам, я его смотрел, это более подробный перезалив?
@@shinigami_yokoso да, здесь гораздо подробнее
@@selfedu_rus Хорошо, спасибо
Автор, спасибо большое! А, единственное, можешь подсказать, что ты менял в json документе, ты true ставил, это на что влияет?
Спасибо! true нужно, чтобы в VSCode при запуске программы можно было что-либо вводить с клавиатуры (т.е. чтобы программа запускалась в терминале, как полноценная)
тут не может быть ошибки в формуле RAND_MAX >= 32767???? или RABD_MAX
RAND_MAX
Доброе время суток !! Подскажите пожалуйста при компиляции такая ошибка "неопределённая ссылка на «sqrt»". Ос Linux Mint. Гуглил, но не понял как решить(((
для компиляции в tasks.json -lm в конце аргументов
"args": [
"-std=c99",
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}",
"-lm"
],
Непонятно где писать для запуска
для запуска setting.json поменять "c": "cd $dir && gcc -std=c99 $fileName -o $fileNameWithoutExt -lm && $dir$fileNameWithoutExt", получается перед && добавить -lm
может кому пригодится!!
Интересно, а есть ли разница в производительности, между *D = sqrt(D);* и *X = sqrt(D);* 🤔
нет разницы
Интересно, а есть ли генераторы реально абсолютно случайных чисел? Я так понимаю, что все "случайные" числа, которые генерируются ПК - на самом деле не случайны.
Есть спец. чипы, но программно можно только псевдослучайные значения генерировать. Меньшую предсказуемость псевдослучайных последовательностей вносят такие добавления как использование текущего времени, измерения интервалов нажатий клавиш\мышки и т.п. Ну и главное, если подойти философски, то случайных случайностей не бывает в принципе.
в относительно новых процах интел и АМД райзен имеются генераторы случайных чисел (статья на вики "RDRAND"). Для работы с генератором в заголовочном файле immintrin.h есть функция _rdrand32_step, но это уже выше стандарта C99
@@Hippan_ мутная штука
@@grayich rdrand или AMD?
@@Hippan_ да )
Это видео про "Случайности не случайны"
Почему то в плейлисте не отображается - ruclips.net/p/PLA0M1Bcd0w8w-mqVmBjt-2J8Z1gVmPZVz
Да, спасибо, сейчас добавлю!
На 9:18 выражение rand() + rand() не дает полностью случайное число, как это делает просто функция rand() 🤓🤓🤓
поясните
Здравствуйте, интересно а можно это делать через циклы например for ?@@selfedu_rus