• Округление при подсчёте в С++?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Потому что 0.1 в двоичном коде не представимо конечным числом.
    0.110 = 0.0(0011)2
    Записывая это число в 32-битовый float вы получаете 1.100110011001100110011012 * 2-4 или 0.10000000149011611938476562510
    Соответственно, когда вы 20 раз прибавляете 0.1 к -1, вы не получаете 1. Вы получаете 1.00000029802322387695312510.
    Это число, очевидно, больше единицы, поэтому условие цикла не срабатывает и 21я строка не выводится.
    Ответ написан
    6 комментариев
  • В каких случаях использовать С++, а в каких Blueprints?

    Логику пишет геймдизайнер, который не очень то программист - напрашиваются BP.

    Сетевой код, работа с голым UDP - напрашивается C++.

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

    Какое-то очень узкое место, где надо обрабатывать кучу чисел и объектов.
    Что-то типа конвейеров в factorio например.
    Напрашивается C++ из-за своей эффективности и плотности логики, ибо то же самое на BP будет очень развесистой лапшой.
    Ответ написан
    Комментировать
  • Как ограничить кол-во символов после точки при вводе данных в С++?

    @res2001
    Developer, ex-admin
    Никто ничего не дописывает. Дело в специфике хранения данных в числах с плавающей точкой.
    Эти числа всегда приближенные. Грубо говоря даже какое-то целое число, типа 3, будет храниться как: 2.9999999999999999999.
    Конкретно 3 будет иметь точное представление, но другие числа будут иметь приближенное представление. Поэтому работая с числами с плавающей точкой лучше всегда иметь ввиду, что это число приближенное.
    Можете почитать что-нибудь по стандарту IEEE754 - стандарт чисел с плавающей точкой, который сейчас используется повсеместно. Так же в интернете есть сайты, где можно глазами увидеть как представляется то или иное число с плавающей точкой в компьютере. Например можете тут посмотреть: https://www.h-schmidt.net/FloatConverter/IEEE754.html
    Ответ написан
    Комментировать
  • Как исправить ошибку -nan(ind) в С++?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Это значение - это результат какого-то запрещенного математического действия. Деление на 0, например. Но на него вы, вроде как, проверяете.

    Другая опасность в вашем коде: логарифм отрицательных чисел. Закомментируйте log в вашем выражении, если результат где-то отрицательный - функцию в этом значении x тупо не вычеслить - оно вне области определения.
    Ответ написан
  • Как зайти под root в Alt Linux?

    @AlexanderKomarchouk
    программист PHP, embedded atmega/stm32
    На самом деле, первое что нужно было сделать - задать нормальный пароль для root при установке системы ALT Linux.
    Далее почитать ссылки в ALT Linux Wiki.
    1) Получение прав root: https://www.altlinux.org/Получение_прав_root
    2) команда su: https://www.altlinux.org/Su
    3) команда sudo: https://www.altlinux.org/Sudo

    Пробуйте, и у вас всё получится.
    P.S. для изменения вашей текущей ситуации, попытайтесь прочитать вот эту статью:
    https://wiki.dieg.info/vosstanovlenie_parolja_root
    Ответ написан
    Комментировать
  • Как зайти под root в Alt Linux?

    leahch
    @leahch Куратор тега Linux
    3D специалист. Dолго, Dорого, Dерьмово.
    Вообще-то нехрен под рутом в линуксах делать!
    Используйте обычного пользователя и sudo -s !

    С другой стороны - AltLinux ничем от всех других дистрибутивов не отличается.
    Смотрите настройки pam и ssh ( как там Вы на свои "сервера" попадаете?)
    Ну и тех-поодержка "в помочи" - на альтлинукс пишите.
    Ответ написан
    1 комментарий
  • Как подключить изображение в Nginx?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Вот еще один отличный ресурс по HTML: https://htmlbook.ru/
    Ответ написан
    Комментировать
  • Как правильно вернуть параметр и передать в main C++?

    @res2001
    Developer, ex-admin
    static void createCharacter(UserCharacter& character) {
    ...
    /* Возврат значений происходит через ссылку, переданную в параметре. 
    В return ничего возвращать не нужно. 
    Создавать другие объекты UserCharacter не нужно. */
    character.x = 10;
    character.y = 10;
    ...
    }
    
    int main() {
     UserCharacter character;
     ...
     createCharacter(character);
      ...
    }
    Ответ написан
    1 комментарий
  • Как происходит динамическое выделение памяти в С++?

    @res2001
    Developer, ex-admin
    Что подразумевается под динамикой?

    Выделение памяти в куче.

    Память может быть выделена:
    1. на стеке - автоматическая память
    2. в сегментах bss, data, rodata - статическая
    3. в куче - динамическая

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

    Стек выделяется при старте потока (в любом процессе есть хотя бы один поток выполнения), имеет фиксированный
    размер. Освобождается стек при завершении потока. Фактически при объявлении переменной на стеке происходит просто увеличение (уменьшение) указателя стека на размер переменной, при удалении - обратный процесс. Поэтому выделение памяти на стеке очень быстрое. Переменные "живут" на стеке пока действует их область видимости, после выхода из области видимости - уничтожаются.

    Статические сегменты памяти выделяются и инициализируются при загрузке исполняемого файла программы в память еще до старта любого кода программы. Сегменты предназначены для хранения статических инициализированных/не инициализированных переменных и констант. Фактически описание этих сегментов содержится в исполняемом файле и подготавливается компилятором. Загрузчик ОС, читает эти сегменты из исполняемого файла в память. Названия сегментов (bss, data, rodata) имеют смысл только для исполняемого файла, после загрузки сегментов в память есть только адреса начала сегментов и их размер (и другие свойства страниц памяти сегментов).

    Куча. Память в куче выделяется по явному запросу программы (new) и уничтожается так же (delete). Не смотря на всю простоту интерфейса выделения/освобождения памяти операции эти довольно затратны (по процессорному времени) и под капотом может происходить много телодвижений, поэтому не следует выделять/освобождать память в куче на каждый int или еще хуже char. Для большинства программ эти затраты не критичны, но в некоторых случаях могут стать узким местом вашей программы.
    Ответ написан
    1 комментарий
  • Правильно ли понимаю работу ссылок в С++?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Это называется передача по ссылке/передача по значению. С амперсантом, передается ссылка на переменную. Иначе - копия значения переменной. Если вы будете менять копию значения, ничего вне функции не изменится, ведь вы копию меняете. А если будете менять значение ссылки, вы будете менять значение той же самой переменной.
    Ответ написан
    Комментировать
  • Правильно ли понимаю работу ссылок в С++?

    Я правильно понял, что дописав амперсанд, функция ссылается на переменную из основной функции?
    Да.
    Ответ написан
    Комментировать