• C++: Как ускорить этот многопоточный код?

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

    В самом конце можно списки объединить. Последовательно. Или с критической секцией. Каждый поток должен получить первый и последний элемент списка. За две операции добавить список к глобальному и изменить последний элемент в глобальном списке. Ну, это если std::list использовать.

    Вообще, если один раз в конце собирать все ответы, то можно их и в vector в критической секции складывать. Это все займет не больше времени, чем один раз ответ вывести.
    Ответ написан
    2 комментария
  • С++ На всех ли платформах одинаковая точность операций с float?

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    Точность зависит от типов данных, которые ты используешь. float и double имеют одинаковую длину в 32бит и 64бит архитектурах.
    Ответ написан
    Комментировать
  • С++ На всех ли платформах одинаковая точность операций с float?

    @res2001
    Developer, ex-admin
    Форматы чисел с плавающей точкой стандартизованы IEEE754.
    Скорее всего, операции выполняемые процессором над числами с плавающей точкой будут давать одинаковый результат на разных платформах.
    Но вот программные реализации различных математических алгоритмов из стандартной библиотеки, типа того же sqrt и т.п., могут отличаться.
    Для гарантии, вам нужно использовать для этих целей какую-то единую библиотеку для всех платформ, а не стандартный math.h.
    Ответ написан
    1 комментарий
  • С++ На всех ли платформах одинаковая точность операций с float?

    @dima20155
    you don't choose c++. It chooses you
    Если вы пишите кросплатформенное ПО, то используйте платформонезависимые типы:
    int32_t, uint16_t, float32_t и так далее (также есть чуть более хитрый unsigned тип std::size_t).

    Это классический подход, которые используется много где. Даже если вы пишите ПО для 2-ух или 3-ех известных вам платформ, то будет хорошей практикой использовать подобные типы.
    https://en.cppreference.com/w/cpp/header/stdfloat

    float занимает 4 байта, double - 8 байт и на 32битной платформе и на 64битной:
    Ответ написан
    1 комментарий
  • С++ На всех ли платформах одинаковая точность операций с float?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Ну ... тут нет теоретически верного ответа. Инфо-технологии - это как физика-естествознание.
    Тут надо просто взять два компиллятора и две платформы. Собрать код типа.

    float x = 3.14;

    и посмотреть sizeof(...)

    Можно еще глянуть как выглядит число 3.14 в бинарном представлении. Сделаешь это кастингом.
    И сделать выводы о стандартах хранения флоатов в данном компилляторе.

    Теоретически должен быть 32х битный везде.

    Но проверь!

    Бывают еще double (64bit) extended (80bit),
    half float (16bit не встречал в практике никогда но литература ссылается).
    Ответ написан
    2 комментария