#18. Генерация псевдослучайных чисел. Функции математической библиотеки | Язык C для начинающих

Поделиться
HTML-код
  • Опубликовано: 15 ноя 2024

Комментарии • 47

  • @dimonhiper7020
    @dimonhiper7020 Год назад +3

    Словил на этом упражнении интересную багофичу. Числа получаются разные, но похожие, как будто реально зависят от времени. Например, запускаем rand() - получаем 25000. Еще раз - 25007, потом 25012, потом 25020. Как будто они привязаны к секундам или еще какой-то большой единице времени. Но если написать еще раз (например, A = rand(); B = rand()) - то B уже получается реально разное.

  • @yerow7979
    @yerow7979 2 месяца назад +1

    спасибо вам большое за труд!

  • @siarheiulas6969
    @siarheiulas6969 4 месяца назад +1

    Большое спасибо за видео!

  • @EmuDellno
    @EmuDellno 3 месяца назад +2

    Для линуксоидов у которых с библиотекой math.h не компилируется: вы при вызове компилятора должны добавить арнумент -lm. Делается это в файле tasks.json

  • @igorpoll2134
    @igorpoll2134 4 месяца назад +1

    Очень спасибо!

  • @andredru4278
    @andredru4278 10 месяцев назад +1

    Спасибо. Все просто.

  • @dkir70
    @dkir70 Год назад +2

    Нужно учитывать что при таком способе генерации вещественных случайных чисел мы будем получать не равномерное распределение вещественных случайных чисел в заданном интервале а случайное вещественное число из "дискретного" набора RAND_MAX вещественных чисел в заданном интервале.

    • @selfedu_rus
      @selfedu_rus  Год назад +2

      Да, это верно. Если набора RAND_MAX мало, то можно сгенерировать два целых числа, сложить и потом сумму разделить уже на 2*RAND_MAX. А так, в цифровой технике любые вещественные числа ограничены определенным набором.

  • @РусланКарнеенко
    @РусланКарнеенко 9 месяцев назад +1

    спасибо

  • @olegkomlev
    @olegkomlev Год назад +2

    Если rand() дает числа в диапазоне [0,​ RAND_MAX] с равномерным распределением, то rand() +rand() даст числа в диапазоне [0,​ 2*RAND_MAX] , но распределение будет не равномерное. Сумма двух независимых, равномерно распределенных случайных величин имеет треугольную плотность вероятности. На краях диапазона вероятность будет меньше, чем в середине диапазона. Лучше применить выражение rand()+rand()%2*(RAND_MAX+1)

    • @selfedu_rus
      @selfedu_rus  Год назад

      да, верно, хорошее дополнение!

    • @aminyovlo1825
      @aminyovlo1825 3 месяца назад

      пока читал твой комментарий хотел очень похожее решение проблемы написать в ответе))))

  • @РусланКарнеенко
    @РусланКарнеенко 7 месяцев назад +1

    Вы говорили, что на Linux gcc должен быть установлен. Можете подсказать, где его найти?

  • @NotIce684
    @NotIce684 8 месяцев назад +1

    Эс-ранд....ох не так мы его в универе называли))

  • @jamjam3337
    @jamjam3337 Год назад +1

    👏👍💥

  • @montgomery_wilde
    @montgomery_wilde Год назад +2

    8:15 как же так получается диапазон от [-5 ; 5)? По видимому, программа сначала вычисляет модуль от деления на range (10), а лишь потом от результата отнимает 5. Но ведь приоритет у унарного минуса выше, чем у деления по модулю.

    • @olegkomlev
      @olegkomlev Год назад +2

      Это не унарный минус, а обычное вычитание, у которого приоритет после операции %. Унарный минус - это знак "-" ,стоящий в начале выражения или сразу после скобки или после знака операции.

  • @АндрейФедоров-р2я
    @АндрейФедоров-р2я 9 месяцев назад +1

    Доброго времени суток! Напомните пожалуйста в каком видео подробно указывается принцип работы =! в функции scanf? Не могу разобраться.

    • @selfedu_rus
      @selfedu_rus  9 месяцев назад

      Когда рассказывается про scanf, говорилось, что он возвращает количество прочитанных в переменные данных. Исходя из этого, дальше конструируются различные команды с этой функцией. (Фантазию и творчество в программировании никто не отменял).

  • @donlinoleum831
    @donlinoleum831 Год назад +1

    О, новый видос, он наверняка крутой, давайте в этом убедимся). ***Посмотрел видос*** Да, видос действительно крутой и познавательный, я в этом убедился)

  • @shinigami_yokoso
    @shinigami_yokoso Год назад

    Этот курс только про Си или можно интерпретировать как курс по плюсам, без ООП?

    • @selfedu_rus
      @selfedu_rus  Год назад +1

      Си - это база для С++, поэтому вполне можно брать за основу и для плюсов.

    • @shinigami_yokoso
      @shinigami_yokoso Год назад

      @@selfedu_rus Просто у вас есть курс по плюсам, я его смотрел, это более подробный перезалив?

    • @selfedu_rus
      @selfedu_rus  Год назад +2

      @@shinigami_yokoso да, здесь гораздо подробнее

    • @shinigami_yokoso
      @shinigami_yokoso Год назад

      @@selfedu_rus Хорошо, спасибо

  • @elbinalfadorson3822
    @elbinalfadorson3822 Год назад +1

    Автор, спасибо большое! А, единственное, можешь подсказать, что ты менял в json документе, ты true ставил, это на что влияет?

    • @selfedu_rus
      @selfedu_rus  Год назад

      Спасибо! true нужно, чтобы в VSCode при запуске программы можно было что-либо вводить с клавиатуры (т.е. чтобы программа запускалась в терминале, как полноценная)

  • @ДмитрийСмирнов-л6э3л

    тут не может быть ошибки в формуле RAND_MAX >= 32767???? или RABD_MAX

  • @donfedor007
    @donfedor007 Год назад +1

    Доброе время суток !! Подскажите пожалуйста при компиляции такая ошибка "неопределённая ссылка на «sqrt»". Ос Linux Mint. Гуглил, но не понял как решить(((

    • @donfedor007
      @donfedor007 Год назад +2

      для компиляции в tasks.json -lm в конце аргументов
      "args": [
      "-std=c99",
      "-fdiagnostics-color=always",
      "-g",
      "${file}",
      "-o",
      "${fileDirname}/${fileBasenameNoExtension}",
      "-lm"
      ],

    • @donfedor007
      @donfedor007 Год назад +1

      Непонятно где писать для запуска

    • @donfedor007
      @donfedor007 Год назад +2

      для запуска setting.json поменять "c": "cd $dir && gcc -std=c99 $fileName -o $fileNameWithoutExt -lm && $dir$fileNameWithoutExt", получается перед && добавить -lm

    • @donfedor007
      @donfedor007 Год назад +2

      может кому пригодится!!

  • @grayich
    @grayich Год назад

    Интересно, а есть ли разница в производительности, между *D = sqrt(D);* и *X = sqrt(D);* 🤔

  • @ГубкаБоб-р8ъ
    @ГубкаБоб-р8ъ Год назад +1

    Интересно, а есть ли генераторы реально абсолютно случайных чисел? Я так понимаю, что все "случайные" числа, которые генерируются ПК - на самом деле не случайны.

    • @grayich
      @grayich Год назад +4

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

    • @Hippan_
      @Hippan_ Год назад

      в относительно новых процах интел и АМД райзен имеются генераторы случайных чисел (статья на вики "RDRAND"). Для работы с генератором в заголовочном файле immintrin.h есть функция _rdrand32_step, но это уже выше стандарта C99

    • @grayich
      @grayich Год назад

      @@Hippan_ мутная штука

    • @Hippan_
      @Hippan_ Год назад

      @@grayich rdrand или AMD?

    • @grayich
      @grayich Год назад

      @@Hippan_ да )

  • @stolebyte2104
    @stolebyte2104 Год назад

    Это видео про "Случайности не случайны"
    Почему то в плейлисте не отображается - ruclips.net/p/PLA0M1Bcd0w8w-mqVmBjt-2J8Z1gVmPZVz

    • @selfedu_rus
      @selfedu_rus  Год назад

      Да, спасибо, сейчас добавлю!

  • @ЕдемВдурку
    @ЕдемВдурку 4 месяца назад +1

    На 9:18 выражение rand() + rand() не дает полностью случайное число, как это делает просто функция rand() 🤓🤓🤓

    • @selfedu_rus
      @selfedu_rus  4 месяца назад

      поясните

    • @АнтонГоголев-э3ы
      @АнтонГоголев-э3ы 14 дней назад

      Здравствуйте, интересно а можно это делать через циклы например for ?@@selfedu_rus