#cpp #common
🤔 🤔 🤔
На днях пришла гениальная мысль стандартизировать
Вообще я помню свою небольшую эволюцию в подсчёте единичных битов. Очевидно, можно сделать втупую:
Потом я узнал, что можно считать за кол-во единичных битов (ого как мы ускорились!):
А потом я нашёл статью на хабре и понял, что не знаю ещё очень много. Впрочем, ничего нового.
Там оказывается подвезли много всего. Из понятно-полезного std::has_single_bit -- является ли число степенью двойки.
🤨 🤨 🤨
Ещё недавно решил поюзать
Круто, скажете вы!Не работает, скажу я. Можно почитать тут.
😏 😏 😏
Валера написал интересный пост про реализацию SharedMutex в yaclib: https://xn--r1a.website/reverse13/720
☕️ ☕️ ☕️
У Вадима Кравченко недавно вышел хороший пост про код-ревью.
Ну и хватит пока. И вам, и мне.
На днях пришла гениальная мысль стандартизировать
__builtin_popcount. Глупец! В C++20 уже есть std::popcount.Вообще я помню свою небольшую эволюцию в подсчёте единичных битов. Очевидно, можно сделать втупую:
while (n > 0) {
if (n & 1) ++cnt;
n >>= 1;
}Потом я узнал, что можно считать за кол-во единичных битов (ого как мы ускорились!):
while (n > 0) {
n &= n - 1;
}А потом я нашёл статью на хабре и понял, что не знаю ещё очень много. Впрочем, ничего нового.
Там оказывается подвезли много всего. Из понятно-полезного std::has_single_bit -- является ли число степенью двойки.
Ещё недавно решил поюзать
constexpr std::string. Основной кейс юзания у меня это завести константы вродеconstexpr std::string kSomeText = "short_text";Круто, скажете вы!
Валера написал интересный пост про реализацию SharedMutex в yaclib: https://xn--r1a.website/reverse13/720
У Вадима Кравченко недавно вышел хороший пост про код-ревью.
Ну и хватит пока. И вам, и мне.
Please open Telegram to view this post
VIEW IN TELEGRAM
#cpp #algo #pub
Написал пост про разреженные структуры данных в дополнение к инфе про sparse set.
https://habr.com/ru/articles/790844/
Написал пост про разреженные структуры данных в дополнение к инфе про sparse set.
https://habr.com/ru/articles/790844/
Хабр
Разреженные структуры данных
Разреженное небо над Дианой и Конём Боджеком Когда-то я писал пост про различные интересные структуры данных . Среди них был т.н. sparse set. Там мы описали его в общих чертах, опустив некоторые...
#cpp #common
0. Интересный докладик о C++20 Nicolai Josuttis с ACCU 2022: My Favourite Code Examples.
1. Прилетел доклад Антона Полухина с C++ Russia 2023: C++ трюки из userver.
Я вообще не то чтобы поклонник его докладов в последнее время, потому что он часто рассказывает примерно одно и то же + внутри слышу про разные штуки сильно раньше, чем снаружи. Повторение одного и того же конечно двигает продукт, о котором рассказывают (userver в данном случае), но никак не двигает сообщество вперёд. Стагнация какая-то. Но этот доклад зашёл. Прикона.
Ну и на осеннем хайлоаде был интересный. И на CppRussia в этом году тоже как будто интересный будет. Может всё не прям так, как я описываю.
2. Parsing Numbers At Compile Time with C++17, C++23, and C++26.
3. Прикольный лайтнинг про проблему нахождение среднего двух чисел: Finding the Average of 2 Integers. И в дополнение вот такой доклад, но уже побольше: std::midpoint? How Hard Could it Be?
не решение (вроде очевидно) и почему
тоже не решение.
4. How to (and how not to) design REST APIs.
0. Интересный докладик о C++20 Nicolai Josuttis с ACCU 2022: My Favourite Code Examples.
1. Прилетел доклад Антона Полухина с C++ Russia 2023: C++ трюки из userver.
Я вообще не то чтобы поклонник его докладов в последнее время, потому что он часто рассказывает примерно одно и то же + внутри слышу про разные штуки сильно раньше, чем снаружи. Повторение одного и того же конечно двигает продукт, о котором рассказывают (userver в данном случае), но никак не двигает сообщество вперёд. Стагнация какая-то. Но этот доклад зашёл. Прикона.
Ну и на осеннем хайлоаде был интересный. И на CppRussia в этом году тоже как будто интересный будет. Может всё не прям так, как я описываю.
2. Parsing Numbers At Compile Time with C++17, C++23, and C++26.
3. Прикольный лайтнинг про проблему нахождение среднего двух чисел: Finding the Average of 2 Integers. И в дополнение вот такой доклад, но уже побольше: std::midpoint? How Hard Could it Be?
std::midpoint -- функция для нахождения среднего двух чисел -- заехала в C++20. В докладе дед рассказывает, почему (a + b) / 2не решение (вроде очевидно) и почему
a + (b - a) / 2тоже не решение.
4. How to (and how not to) design REST APIs.
👍3❤1🤔1
#common
1. У Вадима Кравченко новый пост про заблуждения о быть сеньором. Как всегда, замечательный. В целом поражаюсь этому чуваку, потому что он крепчайше держит высокий уровень. Кайф.
2. И у вастрика новый пост про отличия инди и корпоратов! Пишет конечно хорошо.
Ну и хватит сегодня. Не буду душить количеством.
1. У Вадима Кравченко новый пост про заблуждения о быть сеньором. Как всегда, замечательный. В целом поражаюсь этому чуваку, потому что он крепчайше держит высокий уровень. Кайф.
2. И у вастрика новый пост про отличия инди и корпоратов! Пишет конечно хорошо.
Ну и хватит сегодня. Не буду душить количеством.
❤🔥4👍4❤1🐳1 1
#common #highload
Некоторое время назад мы переписывали внутренний флоу репликации данных, потому что старый подход сломал нам горизонтальное масштабирование одного из кор сервисов.
Что же это за данные, как мы всё починили и немножко базы можно почитать по ссылке : )
https://telegra.ph/Nebolshaya-arhitekturnaya-istoriya-iz-Lavki-03-04
Некоторое время назад мы переписывали внутренний флоу репликации данных, потому что старый подход сломал нам горизонтальное масштабирование одного из кор сервисов.
Что же это за данные, как мы всё починили и немножко базы можно почитать по ссылке : )
https://telegra.ph/Nebolshaya-arhitekturnaya-istoriya-iz-Lavki-03-04
Telegraph
Небольшая архитектурная история из Лавки
Когда вы добавляете в корзину в Лавке товар, фронт дёргает эндпоинт в специальном сервисе (давайте будем называть его cart). Корзина эта хранится в бд сервиса cart. Пару лет назад информация про активные корзины (корзины, которые обновлялись за последние…
👍15🤔5❤🔥2🔥2🤡2 2❤1 1
#cpp
Получился очень загруженный месяц. Чтобы не уходить в новый с одним постом закидываю второй😂
0. C++26 — прогресс и новинки от ISO C++.
1. На reddit есть тред про то, как сложно заставить вектор освободить память.
Давайте предположим, что у нас есть какой-то вектор с данными. Мы хотим его почистить.
Естественным желанием будет вызвать
Ну можно ещё попробовать
Стопроцентным вариантом будет просто присвоить пустой вектор:
Ну или деструктор явно позвать🥳
> Пока копался c вектором, обнаружил новый метод в
2. [видео] Eric Landström: The bugs I remember.
3. Core Guidelines are not Rules.
4. И выцепил пару пропозалов из февральской рассылки:
- inplace_vector
- std::constexpr_v
- std::unitialized<T>
==============================
Там выходит C++Russia 2023 на ютубчик. Не хочу выкладывать по докладу. Подождём ещё какое-то время, пока появятся все доклады, которые мне понравились, и закину пачкой.
Получился очень загруженный месяц. Чтобы не уходить в новый с одним постом закидываю второй
0. C++26 — прогресс и новинки от ISO C++.
1. На reddit есть тред про то, как сложно заставить вектор освободить память.
Давайте предположим, что у нас есть какой-то вектор с данными. Мы хотим его почистить.
Естественным желанием будет вызвать
clear(). Но clear() только установит size_ в ноль (ну конечно ещё почистит объекты). Это в целом логично и естественно, т.к. помогает писать более производительный код. operator= тоже не чистит память. Например можно глянуть на __assign_with_size (одна из веток в операторе копирования). Ну можно ещё попробовать
shrink_to_fit(). И хотя обычно компиляторы честно чистят ненужную память, стандарт говорит, что это non-binding метод (i.e. необязательный). С другой стороны, ну говорит и говорит. Компиляторы обычно чистят, значит норм. Стопроцентным вариантом будет просто присвоить пустой вектор:
vec = std::vector<T>{};Ну или деструктор явно позвать
> Пока копался c вектором, обнаружил новый метод в
std::list: prepend_range (C++23). В других контейнерах подобные тоже подъехали. 2. [видео] Eric Landström: The bugs I remember.
3. Core Guidelines are not Rules.
4. И выцепил пару пропозалов из февральской рассылки:
- inplace_vector
- std::constexpr_v
- std::unitialized<T>
==============================
Там выходит C++Russia 2023 на ютубчик. Не хочу выкладывать по докладу. Подождём ещё какое-то время, пока появятся все доклады, которые мне понравились, и закину пачкой.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤4 1 1
#highload
Две недели не читал статьи! Нагоняем.
0. Серия статей про backend for frontend.
Я когда писал про него коротенький пост и на тот момент ещё не прям понимал, зачем такое делать. Сейчас преисполнился чуть больше. Основные юзкейсы, которые я видел, были про формирование готовой разметки для клиента. Почему это не может делать бекенд? Ну может. Есть же всякие разные server side ui и прочее, но в среднем это скорее про околофронтовые знания, которые тесно связаны с нативом, отображением и около. Короче это про хорошее разделение зон ответственности.
Ну и про другие плюсы можно почитать как раз в статьях.
1. Новый пост (ну как, двухнедельной давности) Вадима Кравченко: Mental Health in Software Engineering.
2. Microservices Design Principles You Really Need To Learn.
Вроде понятные штуки, но вдруг кто-то что-то для себя найдёт.
3. Guide on Structured Logs.
Я в целом про такое задумывался, как такое можно сделать и будет ли полезно. Оказывается есть отдельное название и тулзы. Но у нас как будто такое будет не очень полезно.
4. Optimizing Postgres Column Order.
Звучит хорошо конечно, но такое иногда сложно поддерживать. У нас есть таблички, в которые хотя бы раз в месяц добавляется новая колонка. И непонятно, как меинтейнить порядок в случае такой ситуации.
Ну и как будто может понятность страдать, если вдруг в табличку часто смотрят глазами, но наверное это не то, про что стоит думать при проектировании.
Две недели не читал статьи! Нагоняем.
0. Серия статей про backend for frontend.
Я когда писал про него коротенький пост и на тот момент ещё не прям понимал, зачем такое делать. Сейчас преисполнился чуть больше. Основные юзкейсы, которые я видел, были про формирование готовой разметки для клиента. Почему это не может делать бекенд? Ну может. Есть же всякие разные server side ui и прочее, но в среднем это скорее про околофронтовые знания, которые тесно связаны с нативом, отображением и около. Короче это про хорошее разделение зон ответственности.
Ну и про другие плюсы можно почитать как раз в статьях.
1. Новый пост (ну как, двухнедельной давности) Вадима Кравченко: Mental Health in Software Engineering.
2. Microservices Design Principles You Really Need To Learn.
Вроде понятные штуки, но вдруг кто-то что-то для себя найдёт.
3. Guide on Structured Logs.
Я в целом про такое задумывался, как такое можно сделать и будет ли полезно. Оказывается есть отдельное название и тулзы. Но у нас как будто такое будет не очень полезно.
4. Optimizing Postgres Column Order.
Звучит хорошо конечно, но такое иногда сложно поддерживать. У нас есть таблички, в которые хотя бы раз в месяц добавляется новая колонка. И непонятно, как меинтейнить порядок в случае такой ситуации.
Ну и как будто может понятность страдать, если вдруг в табличку часто смотрят глазами, но наверное это не то, про что стоит думать при проектировании.
❤1👍1🤔1
#highload
Выложили записи SaintHighload++ 2023! Делюсь тем, что понравилось.
1. Octree, или Сказ о поиске пути в 3D.
В общих чертах интересно. Всё-таки геймдев крута с точки зрения задач. Жаль, что я в среднем продукт не одобряю.
Есть правда ощущение, что то ли я глупый, то ли чуваки очень много всего проскакали галопом и местами совсем непонятно, что же имеется в виду и как это должно работать.
2. Групповые чаты в Одноклассниках🙂
3. Как сделать поиск в интернет-магазине.
Задача мне хорошо знакомая. Специфика/проблемы тоже. Было интересно.
4. Архитектура ленты и рекомендаций ВКонтакте.
Пару моментов:
- на одном из первых слайдов докладчик говорит, что вот у них в p50 ответ за 600мс. Я чёт угарнул, потому что кто вообще смотрит на p50. Ну p95 ещё с натягом ок. Но как будто p98/p99 гораздо важнее, особенно для таких огромных сервисов. Выглядит как политический ход, т.к. в перцентилях выше какой-то разнос в таймингах.
- на другом слайде был скрин из паблика Душа пацана. Посмеялся.
- я когда-то ранжированием ленты был оч недоволен, потому что у меня паттерн в ВК был зайти и посмотреть 25 записей за последние сутки из трёх пабликов, на которые я подписан. А тут они начали что-то воротить. И отключить емнип первое время было нельзя. Но конечно понятно, что это всё на метрики в целом влияет почти наверняка хорошо.
- в какой-то момент докладчик начал рассказывать, как они генерят PHP код, с поведением эквивалентным поведению ML-модели, который потом по классике транслируется в плюсы. Hahaha, classic☺️
5. 7 петабайт логов в Elastic. Как мы это сделали?
Неплохо про базу эластика рассказали с упором на свой кейс.
Вот так немножко получилось. Как-то остальное либо не заинтересовало, либо просто не понравилось в процессе.
Выложили записи SaintHighload++ 2023! Делюсь тем, что понравилось.
Нужно отметить, что я довольно грубо отсеиваю доклады: сначала выбираю по названию, -- из-за чего могу что-то интересное да упустить. Но смотреть всё подряд в условиях довольно ограниченного времени больно. Так что как есть.
1. Octree, или Сказ о поиске пути в 3D.
В общих чертах интересно. Всё-таки геймдев крута с точки зрения задач. Жаль, что я в среднем продукт не одобряю.
Есть правда ощущение, что то ли я глупый, то ли чуваки очень много всего проскакали галопом и местами совсем непонятно, что же имеется в виду и как это должно работать.
2. Групповые чаты в Одноклассниках
3. Как сделать поиск в интернет-магазине.
Задача мне хорошо знакомая. Специфика/проблемы тоже. Было интересно.
4. Архитектура ленты и рекомендаций ВКонтакте.
Пару моментов:
- на одном из первых слайдов докладчик говорит, что вот у них в p50 ответ за 600мс. Я чёт угарнул, потому что кто вообще смотрит на p50. Ну p95 ещё с натягом ок. Но как будто p98/p99 гораздо важнее, особенно для таких огромных сервисов. Выглядит как политический ход, т.к. в перцентилях выше какой-то разнос в таймингах.
- на другом слайде был скрин из паблика Душа пацана. Посмеялся.
- я когда-то ранжированием ленты был оч недоволен, потому что у меня паттерн в ВК был зайти и посмотреть 25 записей за последние сутки из трёх пабликов, на которые я подписан. А тут они начали что-то воротить. И отключить емнип первое время было нельзя. Но конечно понятно, что это всё на метрики в целом влияет почти наверняка хорошо.
- в какой-то момент докладчик начал рассказывать, как они генерят PHP код, с поведением эквивалентным поведению ML-модели, который потом по классике транслируется в плюсы. Hahaha, classic
5. 7 петабайт логов в Elastic. Как мы это сделали?
Неплохо про базу эластика рассказали с упором на свой кейс.
Вот так немножко получилось. Как-то остальное либо не заинтересовало, либо просто не понравилось в процессе.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1🤔1
#highload #cpp
Микропост.
1. The only two log levels you need are INFO and ERROR.
Сомнительно, но окэй.
2. std::expected - Monadic extensions.
3. Use percentiles to analyze application performance.
Вроде понятно, но на всякий.
4. Lessons after a half-billion GPT tokens.
============================================
Блин, ребят. Знали бы вы, как я отдыхал эти две недели.
Микропост.
1. The only two log levels you need are INFO and ERROR.
Сомнительно, но окэй.
2. std::expected - Monadic extensions.
3. Use percentiles to analyze application performance.
Вроде понятно, но на всякий.
4. Lessons after a half-billion GPT tokens.
============================================
Блин, ребят. Знали бы вы, как я отдыхал эти две недели.
❤8👍2
#cpp #algo #pub
Когда-то (ещё в августе 2023) я хотел написать про одну из возможных реализаций связного списка, а потом как-то разошёлся и написал про все мне известные. Ну как-то вот так и получилось.
https://habr.com/ru/articles/814955/
Когда-то (ещё в августе 2023) я хотел написать про одну из возможных реализаций связного списка, а потом как-то разошёлся и написал про все мне известные. Ну как-то вот так и получилось.
https://habr.com/ru/articles/814955/
Хабр
Многообразие связных списков
Связный список — классическая структура данных, которая позволяет быстрые вставки/удаления, но при этом просаживает другие операции (случайный доступ к элементу). Мы пройдёмся от базовой...
👍24⚡4❤2✍1🔥1🫡1
#cpp
Наконец выложили все интересные мне доклады с C++ Russia 2023. Вот они слева направо:
1. Designing Robust APIs: How to Write C++ Code that's Safe, Extensible, Efficient & Easy to Use🤔
2. Учим Кукушку Летать, или ConcurrentHashMap with Seqlocks🥴
3. Санитайзеры и стандарт не спасут🤨
4. Имплементируем класс tuple в 100 строк кода☺️
5. C++ трюки из userver☺️
6. Как правильно писать компараторы🥳
7. Семантические процессы в C++🤨
8. И два отдельных, которые относительно похожи по теме + немножко расширили сознание про то, какие штуки чуваки делают на плюсах:
- Демосцена: в погоне за wow-фактором🤔
- Sizecoding: взгляд изнутри🤔
Ну напостил, теперь можно и отдыхать.
Наконец выложили все интересные мне доклады с C++ Russia 2023. Вот они слева направо:
1. Designing Robust APIs: How to Write C++ Code that's Safe, Extensible, Efficient & Easy to Use
2. Учим Кукушку Летать, или ConcurrentHashMap with Seqlocks
3. Санитайзеры и стандарт не спасут
4. Имплементируем класс tuple в 100 строк кода
5. C++ трюки из userver
6. Как правильно писать компараторы
7. Семантические процессы в C++
8. И два отдельных, которые относительно похожи по теме + немножко расширили сознание про то, какие штуки чуваки делают на плюсах:
- Демосцена: в погоне за wow-фактором
- Sizecoding: взгляд изнутри
Ну напостил, теперь можно и отдыхать.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥12👍6❤3 2🔥1
[неожиданно] #math #algo
Делюсь небольшой задачей из начала универа. Сильно мне тогда понравилась.
https://telegra.ph/Zadacha-iz-molodosti-05-30
Единственное что пришлось приложить немалые усилия (и попросить помощь у друзей), чтобы восстановить картинку в голове, потому что математик из меня так себе.
Делюсь небольшой задачей из начала универа. Сильно мне тогда понравилась.
https://telegra.ph/Zadacha-iz-molodosti-05-30
Единственное что пришлось приложить немалые усилия (и попросить помощь у друзей), чтобы восстановить картинку в голове, потому что математик из меня так себе.
Telegraph
Задача из молодости
Когда-то на первом курсе (уже 5 лет назад, ого!) мне показали очередную задачу на codeforces. Я её довольно сильно запомнил, потому что она не очень сложная с точки зрения математических рассуждений и красиво сворачивается в понятный ответ (который ещё и…
👍7❤4💅4
#cpp #common
0. Коллеги выпустили новый релиз userver (какое-то время назад).
1. GIL в Python: как его будут отключать.
Ну наконец-то тут что-то задвигалось.
2. Прошлогодний, но от этого не менее полезный и интересный пост Вадима Кравченко: Contracts you should never sign.
3. Lightning Talk: Writing a Better std::move.
===================================
Во-первых, я сгонял на C++ Russia с маленьким рассказом про (N)RVO. Опять же посмотреть на всё в офлайне было интересно. Увидеть каких-то челов из телевизора тоже. С кем-то даже пообщался. Записи моей правда не будет в открытом доступе. Такой вот артефакт лайтнингов.
Во-вторых, мы ищем к себе разработчика в команду (вот прям в мою). Базово требования такие:
- знаете плюсы (что бы это ни значило)
- есть опыт работы с бекендом.
За деталями/обсудить можно писать мне (@vanyakhodor). И конечно смотреть в вакансию: https://yandex.ru/jobs/vacancies/разработчик-бэкенда-в-лавку-20286
0. Коллеги выпустили новый релиз userver (какое-то время назад).
1. GIL в Python: как его будут отключать.
Ну наконец-то тут что-то задвигалось.
2. Прошлогодний, но от этого не менее полезный и интересный пост Вадима Кравченко: Contracts you should never sign.
3. Lightning Talk: Writing a Better std::move.
===================================
Во-первых, я сгонял на C++ Russia с маленьким рассказом про (N)RVO. Опять же посмотреть на всё в офлайне было интересно. Увидеть каких-то челов из телевизора тоже. С кем-то даже пообщался. Записи моей правда не будет в открытом доступе. Такой вот артефакт лайтнингов.
Во-вторых, мы ищем к себе разработчика в команду (вот прям в мою). Базово требования такие:
- знаете плюсы (что бы это ни значило)
- есть опыт работы с бекендом.
За деталями/обсудить можно писать мне (@vanyakhodor). И конечно смотреть в вакансию: https://yandex.ru/jobs/vacancies/разработчик-бэкенда-в-лавку-20286
👍7❤4👎2🤔2
#common #math
Наткнулся на статью про то, как быстро и корректно складывать числа с плавающей запятой (ссылка будет в конце).
Общая проблема в том, что из-за того, что дробные числа хранятся в примитивных типах не точно, может возникать некоторая потеря точности (сорян за тавтологию) при арифметических операциях. Например когда складываешь большое число с маленьким, маленькое вполне может никак не изменить ответ, т.к. оно с точки зрения хранения чисел "пренебрежимо мало" (ну или нужное число не может быть представлено дробным число) Вопрос в том, как наиболее точно сложить какое-то множество чисел.
Пусть у вас есть какой-то массив числе с плавающей запятой. Конечно мы можем сложить числа просто подряд:
Но тогда у вас в какой-то момент может получится огромное число и следующее добавление маленького легко потеряется из-за погрешности.
А можем отсортировать вектор чисел перед суммой! Тогда мы будем накапливать сумму и при добавлении следующего числа по возрастанию оно может быть сравнимо с текущей суммой (хотя конечно зависит от данных, т.к. если все ваши числа это 1 + x_i, где x_i -- последовательность очень маленьких возрастающих чисел, то в какой-то момент большая сумма скушает этот 1 + eps).
Можно сделать лучше. Например закинуть все числа в кучу и попарно складывать два самых маленьких числа, возвращая результат обратно. Это может работать лучше, т.к. теперь мы ни в какой момент не будем складывать сумму большого количества элементов с одним небольшим.
Дальше развивать не буду. Прочитаете в статье: оригинал и перевод.
Кстати когда-то у студентов на пару лет младше в унике видел фановый контест в рамках одной из дисциплин, где нужно было найти сумму чисел наиболее точно (авторское решение, естественно, на длинке python). Первое место забрал чувак с суммой Кэхена.
Ну и мем из молодости: плавающая запятая.
Наткнулся на статью про то, как быстро и корректно складывать числа с плавающей запятой (ссылка будет в конце).
Общая проблема в том, что из-за того, что дробные числа хранятся в примитивных типах не точно, может возникать некоторая потеря точности (сорян за тавтологию) при арифметических операциях. Например когда складываешь большое число с маленьким, маленькое вполне может никак не изменить ответ, т.к. оно с точки зрения хранения чисел "пренебрежимо мало" (ну или нужное число не может быть представлено дробным число) Вопрос в том, как наиболее точно сложить какое-то множество чисел.
Пусть у вас есть какой-то массив числе с плавающей запятой. Конечно мы можем сложить числа просто подряд:
std::vector<float> v = Get();
float ans = 0.0;
for (int i = 0; i < v.size(); ++i) {
ans += v[i];
}
Но тогда у вас в какой-то момент может получится огромное число и следующее добавление маленького легко потеряется из-за погрешности.
А можем отсортировать вектор чисел перед суммой! Тогда мы будем накапливать сумму и при добавлении следующего числа по возрастанию оно может быть сравнимо с текущей суммой (хотя конечно зависит от данных, т.к. если все ваши числа это 1 + x_i, где x_i -- последовательность очень маленьких возрастающих чисел, то в какой-то момент большая сумма скушает этот 1 + eps).
Можно сделать лучше. Например закинуть все числа в кучу и попарно складывать два самых маленьких числа, возвращая результат обратно. Это может работать лучше, т.к. теперь мы ни в какой момент не будем складывать сумму большого количества элементов с одним небольшим.
Дальше развивать не буду. Прочитаете в статье: оригинал и перевод.
Кстати когда-то у студентов на пару лет младше в унике видел фановый контест в рамках одной из дисциплин, где нужно было найти сумму чисел наиболее точно (авторское решение, естественно, на длинке python). Первое место забрал чувак с суммой Кэхена.
Ну и мем из молодости: плавающая запятая.
❤23👍4
#highload #cpp #common
1. В конце мая был довольно громкий инцидент у Google Cloud, который сильно зааффектил клиента в Австралии. Если не читали пост-мортем, то вот он: Sharing details on a recent incident impacting one of our customers.
2. New C++ features in GCC 14.
3. Саша написал постики про throwing values: первый и второй (почитайте комменты ещё).
4. Тут вы можете найти список строк, которые могут деструктивно повлиять на ваш продукт. Тут и всякие инъекции, и более семантически сложные строки.
1. В конце мая был довольно громкий инцидент у Google Cloud, который сильно зааффектил клиента в Австралии. Если не читали пост-мортем, то вот он: Sharing details on a recent incident impacting one of our customers.
2. New C++ features in GCC 14.
3. Саша написал постики про throwing values: первый и второй (почитайте комменты ещё).
4. Тут вы можете найти список строк, которые могут деструктивно повлиять на ваш продукт. Тут и всякие инъекции, и более семантически сложные строки.
#common
Если я переписываю какие-то посты, то я расту.
По крайней мере я в это верю.
Снова про пагинацию : )
https://telegra.ph/Paginaciya-07-05
Если я переписываю какие-то посты, то я расту.
По крайней мере я в это верю.
Снова про пагинацию : )
https://telegra.ph/Paginaciya-07-05
Telegraph
Пагинация
У меня уже было пару постов про пагинацию, но хочется свести это всё в один + докинуть какой-то интересной инфы.
👍18❤3
#cpp
1. Небольшой доклад про нахождение медианы с CppCon 2023.
2. TDD CANNOT work.
Какой-то околоформальный наброс, но и ладно : )
3. У Жени вышел очередной (и очень интересный) пост про жостиков C++.
4. Небольшой факт про макросы (в целом писал про них тут).
Если макросы у вас сложные, как этот:
вы можете захотеть использовать designated initialization. Проблема тут в том, что когда аргументов больше одного, вам нужно перечислять их через запятую. И это не работает!
Компилятор считает, что эта запятая -- разделитель аргументов макроса. Т.е. вы передаёте 4 аргумента:
Что не выглядит как ожидаемый результат.
Такая же проблема в случае, когда вы хотите шаблоны юзать:
Запятая не считывается как разделитель аргументов макроса только внутри круглых скобок.
Вы всегда можете поправить : )
1. Небольшой доклад про нахождение медианы с CppCon 2023.
2. TDD CANNOT work.
Какой-то околоформальный наброс, но и ладно : )
3. У Жени вышел очередной (и очень интересный) пост про жостиков C++.
4. Небольшой факт про макросы (в целом писал про них тут).
Если макросы у вас сложные, как этот:
MACROS_NAME(name, name,
[]() {
Type obj {.x = 2, .y = 3};
return x;
}()
);
вы можете захотеть использовать designated initialization. Проблема тут в том, что когда аргументов больше одного, вам нужно перечислять их через запятую. И это не работает!
Компилятор считает, что эта запятая -- разделитель аргументов макроса. Т.е. вы передаёте 4 аргумента:
name
name
[]() { Type obj {.x = 2
.y = 3}; return x; }()
Что не выглядит как ожидаемый результат.
Такая же проблема в случае, когда вы хотите шаблоны юзать:
MACROS(std::map<int, int>);
Запятая не считывается как разделитель аргументов макроса только внутри круглых скобок.
Вы всегда можете поправить : )
❤5 3👍2
Приходите на C++ Zero Cost Conf 27 июля!
Конференция одновременно пройдёт в Москве, Ереване и онлайн. А ещё будет крутой нетворкинг и афтерпати.
Мне лично хочется послушать следующие доклады:
- Антон Полухин про новости C++26 и C++29
- Василий Куликов про реализацию мьютекса в userver
- Сергей Слотин про устройство памяти и кешей и производительность
- Данила Демидов про отказ от динамического распределения памяти
- Александр Боргардт про завоз кастомного аллокатора в Otterbrix
- Алексей Веселовский про компоновщик и санитайзеры
- Павел Новиков про сериализацию JSON (видимо в продолжение доклада на C++ Russia)
- Андрей Аксёнов про парсинг большого количества данных
- Константин Владимиров про llvm-snippy.
И конечно вы можете найти мой рассказ про NRVO : )
Зарегистрироваться можно по ссылке.
До встречи на C++ Zero Cost Conf! ☀️
Конференция одновременно пройдёт в Москве, Ереване и онлайн. А ещё будет крутой нетворкинг и афтерпати.
Мне лично хочется послушать следующие доклады:
- Антон Полухин про новости C++26 и C++29
- Василий Куликов про реализацию мьютекса в userver
- Сергей Слотин про устройство памяти и кешей и производительность
- Данила Демидов про отказ от динамического распределения памяти
- Александр Боргардт про завоз кастомного аллокатора в Otterbrix
- Алексей Веселовский про компоновщик и санитайзеры
- Павел Новиков про сериализацию JSON (видимо в продолжение доклада на C++ Russia)
- Андрей Аксёнов про парсинг большого количества данных
- Константин Владимиров про llvm-snippy.
И конечно вы можете найти мой рассказ про NRVO : )
Зарегистрироваться можно по ссылке.
До встречи на C++ Zero Cost Conf! ☀️
👍27🎉10❤5🔥5
#cpp
Доклад про NRVO можно посмотреть тут.
Хочется сказать большое спасибо Илье (@imhired), Жене (@cxx95) и Лёше (@aleexf) за огромную помощь с докладом. Всё-таки есть что-то в силе слабых связей (ну или сильных).
Отсмотрю все доклады и на днях выложу постик про то, что зашло. А пока посмотрите мой пару раз : )
Доклад про NRVO можно посмотреть тут.
Хочется сказать большое спасибо Илье (@imhired), Жене (@cxx95) и Лёше (@aleexf) за огромную помощь с докладом. Всё-таки есть что-то в силе слабых связей (ну или сильных).
Отсмотрю все доклады и на днях выложу постик про то, что зашло. А пока посмотрите мой пару раз : )
👍36❤17🔥2👏1