C++ Academy
前往频道在 Telegram
📈 Telegram 频道 C++ Academy 的分析概览
频道 C++ Academy (@cpluspluc) 俄语 语言赛道中的 是活跃参与者。目前社区聚集了 15 522 名订阅者,在 技术与应用 类别中位列第 8 268,并在 俄罗斯 地区排名第 42 183 位。
📊 受众指标与增长动态
自 невідомо 创建以来,项目保持高速增长,吸引了 15 522 名订阅者。
根据 25 十月, 2026 的最新数据,频道保持稳定运转。过去 30 天订阅人数变化为 14,过去 24 小时变化为 -4,整体触达仍然可观。
- 认证状态: 未认证
- 互动率 (ER): 平均受众互动率为 16.26%。内容发布后 24 小时内通常能获得 6.85% 的反应,占订阅者总量。
- 帖子覆盖: 每篇帖子平均可获得 2 524 次浏览,首日通常累积 1 063 次浏览。
- 互动与反馈: 受众积极参与,单帖平均反应数为 27。
- 主题关注点: 内容集中在 c++, github, linux, api, архитектура 等核心主题上。
📝 描述与内容策略
作者将该频道定位为表达主观观点的平台:
“По всем вопросам- @workakkk
РКН: clck.ru/3FmxJF
#VRHSZ”
凭借高频更新(最新数据采集于 26 十月, 2026),频道始终保持新鲜度与高覆盖。分析显示受众积极互动,使其成为 技术与应用 类别中的关键影响点。
15 522
订阅者
-424 小时
-147 天
+1430 天
正在加载数据
相似频道
标签云
进出提及
---
---
---
---
---
---
吸引订阅者
十月 '2610月 '26
十月 '26
+112
在37个频道中
九月 '26
+112
在31个频道中
Get PRO
八月 '26
+118
在40个频道中
Get PRO
七月 '26
+82
在42个频道中
Get PRO
六月 '26
+56
在1个频道中
Get PRO
五月 '26
+130
在3个频道中
Get PRO
四月 '26
+49
在0个频道中
Get PRO
三月 '26
+92
在21个频道中
Get PRO
二月 '26
+93
在44个频道中
Get PRO
一月 '26
+437
在110个频道中
Get PRO
十二月 '25
+66
在2个频道中
Get PRO
十一月 '25
+217
在44个频道中
Get PRO
十月 '25
+81
在15个频道中
Get PRO
九月 '25
+116
在38个频道中
Get PRO
八月 '25
+291
在9个频道中
Get PRO
七月 '25
+518
在77个频道中
Get PRO
六月 '25
+347
在73个频道中
Get PRO
五月 '25
+82
在5个频道中
Get PRO
四月 '25
+105
在27个频道中
Get PRO
三月 '25
+120
在1个频道中
Get PRO
二月 '25
+175
在40个频道中
Get PRO
一月 '25
+175
在47个频道中
Get PRO
十二月 '24
+585
在58个频道中
Get PRO
十一月 '24
+1 337
在186个频道中
Get PRO
十月 '24
+2 234
在75个频道中
Get PRO
九月 '24
+848
在203个频道中
Get PRO
八月 '24
+580
在42个频道中
Get PRO
七月 '24
+837
在52个频道中
Get PRO
六月 '24
+2 266
在64个频道中
Get PRO
五月 '24
+498
在39个频道中
Get PRO
四月 '24
+571
在47个频道中
Get PRO
三月 '24
+653
在20个频道中
Get PRO
二月 '24
+907
在5个频道中
Get PRO
一月 '24
+705
在42个频道中
Get PRO
十二月 '23
+447
在39个频道中
Get PRO
十一月 '23
+162
在31个频道中
Get PRO
十月 '23
+224
在0个频道中
Get PRO
九月 '23
+385
在0个频道中
Get PRO
八月 '23
+2 329
在0个频道中
Get PRO
七月 '23
+498
在1个频道中
Get PRO
六月 '23
+565
在0个频道中
Get PRO
五月 '23
+5 320
在0个频道中
Get PRO
四月 '23
+126
在0个频道中
Get PRO
三月 '23
+422
在0个频道中
Get PRO
二月 '23
+707
在0个频道中
| 日期 | 订阅者增长 | 提及 | 频道 | |
| 26 十月 | +4 | |||
| 25 十月 | +1 | |||
| 24 十月 | 0 | |||
| 23 十月 | +3 | |||
| 22 十月 | +6 | |||
| 21 十月 | +2 | |||
| 20 十月 | 0 | |||
| 19 十月 | +6 | |||
| 18 十月 | +19 | |||
| 17 十月 | +18 | |||
| 16 十月 | +2 | |||
| 15 十月 | +4 | |||
| 14 十月 | +7 | |||
| 13 十月 | 0 | |||
| 12 十月 | +5 | |||
| 11 十月 | +5 | |||
| 10 十月 | +3 | |||
| 09 十月 | +1 | |||
| 08 十月 | +3 | |||
| 07 十月 | +4 | |||
| 06 十月 | +7 | |||
| 05 十月 | +8 | |||
| 04 十月 | +3 | |||
| 03 十月 | 0 | |||
| 02 十月 | 0 | |||
| 01 十月 | +1 |
频道帖子
«what the fu**?»: самый странный комментарий в игровом коде
Одна строка из Quake III заменяет деление и корень сдвигом битов и магическим числом 0x5f3759df. Покажу на примере, как это работает, и посчитаю погрешность: 3.44% до уточнения и 0.175% после одного шага Ньютона. А кто на самом деле придумал трюк, вы вряд ли угадаете.
https://youtube.com/shorts/oIpqqzNNCHo
| 2 | Алгоритм is_partitioned
Алгоритм is_partitioned — это алгоритм из стандартной библиотеки algorithm, который проверяет, разбит ли диапазон элементов определенным образом.
Принимает три параметра:
— Два итератора, задающих проверяемый диапазон.
— Предикат (функцию или функтор), определяющий разбиение.
Возвращает bool значение — true если диапазон разбит согласно предикату и false в противном случае.
Этот алгоритм предпочтительнее цикла, т. к. проще в использовании и читабельнее, ведь он эффективно проверяет условие за один проход по последовательности.
В примере мы определяем предикат isEven для проверки четности числа, передаем его в is_partitioned вместе с вектором v и выводим результат.
#это_база | 1 333 |
| 3 | ✔️ В C++26 появились контракты. Но проверка условия ещё не гарантирует оптимизацию
Контракты позволяют задавать предусловия и постусловия функции. Например, потребовать, чтобы делитель был ненулевой степенью двойки:
uint32_t ring_index(uint32_t i, uint32_t n)
pre(n && (n & (n - 1)) == 0)
{
return i % n;
}
Для таких беззнаковых чисел i % n можно заменить на более дешёвое i & (n - 1). Однако в примере автора GCC 16 не выполняет эту оптимизацию автоматически.
Поддержка контрактов включается через -fcontracts. В режиме enforce нарушение вызывает обработчик и завершение программы. Поведение зависит от выбранного режима проверки. Документация GCC -https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Dialect-Options.html .
Атрибут C++23 [[assume(условие)]] даёт оптимизатору дополнительную информацию, но не проверяет условие. Если оно ложно, поведение программы не определено. | 1 760 |
| 4 | 🌟 SonicBoom: движок инференса без Python
HardenedVault, которая специализируется на безопасности Linux и компиляторов, выложила среду исполнения SonicBoom, написанной с нуля на C++ и CUDA. Python ей не нужен ни для работы, ни для сборки.
Цель проекта – локальный запуск языковых моделей на потребительских видеокартах.
Всё упаковано в одну библиотеку libsonicboom.so, которую можно подключить из любого языка через стандартный интерфейс C, основным языком для работы с ней авторы выбрали Scheme в реализации GNU Guile.
SonicBoom загружает модели в GGUF, генерирует текст на процессоре или видеокарте и поднимает локальный сервер, совместимый с API OpenAI.
Если новый запрос начинается с того же текста, что и предыдущий, заново обрабатывается только добавленная часть, и результат до токена совпадает с полным пересчётом.
🟡Механика
Скорость вывода дают уровни над вычислительными ядрами, а не сами ядра. Умножение квантованных матриц и токенизаторы частично перенесены из llama.cpp.
Над ними работает планировщик, который до запуска переписывает граф модели целиком, сливает соседние операции и записывает весь шаг генерации токена в один CUDA Graph, т. е. в готовую последовательность команд для видеокарты.
Ещё выше стоит компилятор на базе MLIR. Он сам генерирует часть ядер для GPU, в том числе для механизма внимания, и при первом запуске подбирает самый быстрый вариант под конкретную карту.
🟡Тесты
На RTX 3050 с 8 ГБ памяти сравнили SonicBoom и llama.cpp на одних и тех же моделях.
Gemma 4 E4B через SonicBoom дала генерацию в 53 токена в секунду против 44,8 у llama.cpp.
У Qwen2.5-0.5B вышло 344,7 токена в секунду против 307,6.
Когда контекст дорастает до 512 токенов, SonicBoom на Qwen уже чуть отстаёт.
Единственный сторонний результат на RTX 4060 Ti оказался хуже llama.cpp, 73,6 токена в секунду против 78, но его получили на сборке, ещё не настроенной под эту видеокарту.
Пока проверены только две модели, Gemma 4 E4B-it и Qwen2.5-0.5B-Instruct, и только видеокарты серии RTX 30.
Модель всегда выбирает самый вероятный токен, температуру и другие настройки случайности задать нельзя.
Следующими в планах стоят модели Llama и Mistral, работа через Vulkan, генерация ядер для видеокарт других производителей и диффузионные модели.
Дальше SonicBoom планирует вырасти в фреймворк в духе PyTorch, где модель пишут на Scheme и компилируют в граф вычислений. Прототип этого режима уже обучает небольшой трансформер.
📌Лицензирование: GPL-3.0
🖥Github
@ai_machinelearning_big_data
#AI #ML #LLM #InferenceEngine #SonicBoom | 1 535 |
| 5 | 🎮 Оказывается, Wolfenstein 3D-подобный raycaster можно собрать примерно в 250 строках C++.
Принцип довольно элегантный: для каждого вертикального столбца экрана выпускается один луч через карту, а пересечения со стенами ищутся через DDA - Digital Differential Analysis.
Ключевой трюк:
deltaDist = abs(1 / rayDir)
После попадания в стену используется не обычная длина луча, а перпендикулярное расстояние до стены — это убирает характерное fish-eye искажение.
Дальше всё почти классически:
* рассчитывается высота стены на экране;
* выбирается текстура;
* вычисляется точка попадания;
* рисуется вертикальная полоса пикселей.
Минимум кода и уже получается полноценная псевдо-3D графика в стиле первых Wolfenstein/Doom-подобных движков.
Отличный проект, чтобы реально понять raycasting, DDA и основы старой 3D-графики. | 1 763 |
| 6 | Виртуальных агентов обсудят на митапе «Русское техно 2» от MWS 23 октября. ⚡ Успейте зарегистрироваться.
В программе доклады и дискуссии по темам:
— Как построить control plane для персональных ИИ-агентов на Kubernetes.
— Как построить агентный производственный процесс в связке с Harness.
— Подходы к управлению командами с ИИ-агентами. Как меняются метпроцессы внутри команды?
— Когда ИИ-агент становится экономически оправданным.
А также участников ждет битва промптов и нетворкинг.
Когда: 23 октября
Формат: офлайн в Москве и онлайн
Зарегистрироваться | 1 148 |
| 7 | 🎮 Оказывается, Wolfenstein 3D-подобный raycaster можно собрать примерно в 250 строках C++.
Принцип довольно элегантный: для каждого вертикального столбца экрана выпускается один луч через карту, а пересечения со стенами ищутся через DDA - Digital Differential Analysis.
Ключевой трюк:
deltaDist = abs(1 / rayDir)
После попадания в стену используется не обычная длина луча, а перпендикулярное расстояние до стены — это убирает характерное fish-eye искажение.
Дальше всё почти классически:
* рассчитывается высота стены на экране;
* выбирается текстура;
* вычисляется точка попадания;
* рисуется вертикальная полоса пикселей.
Минимум кода и уже получается полноценная псевдо-3D графика в стиле первых Wolfenstein/Doom-подобных движков.
Отличный проект, чтобы реально понять raycasting, DDA и основы старой 3D-графики. | 109 |
| 8 | 🧠 TIL: SQLite превращает числа в текст сразу по две цифры
Обычно integer → string делают циклом:
/ 10 → берём цифру
% 10 → остаток
и повторяем снова.
SQLite идёт хитрее.
В исходниках есть строка на 200 символов, содержащая все пары от 00 до 99:
000102030405...979899
При преобразовании числа SQLite обрабатывает его по две цифры за раз и просто берёт нужную пару символов по индексу.
То есть вместо множества операций /10 и %10:
делим на 100 → получаем две цифры → копируем готовую пару.
Маленькая оптимизация, но именно из таких деталей и состоит быстрый системный код.
Исходник: sqlite/src/util.c | 2 221 |
| 9 | 🔥 Хочешь быстрее расти в IT? Хватит учиться в одиночку
Окружение решает больше, чем кажется.
Собрал папки и каналы, где можно быстрее влиться в нужное направление, следить за трендами и не вариться в своём пузыре.
AI: t.me/ai_machinelearning_big_data
Python: t.me/pythonl
Linux: t.me/linuxacademiya
Хакинг: t.me/linuxkalii
DevOps: t.me/DevOPSitsec
Docker: https://t.me/+90Z5TAyfuNU5YmRi
Golang: t.me/Golang_google
Rust: t.me/rust_code
C++: t.me/cpluspluc
C#: t.me/csharp_ci
Java: t.me/javatg
JavaScript: t.me/javascriptv
React: t.me/react_tg
Frontend: t.me/front
PHP: t.me/phpshka
Android: t.me/android_its
Мобильная разработка: t.me/mobdevelop
Базы данных: t.me/sqlhub
Data Science: t.me/data_analysis_ml
Big Data: t.me/bigdatai
Математика: t.me/data_math
Физика: t.me/fizmat
Kubernetes: t.me/kubernetc
GameDev: https://t.me/gamedev
Haskell: t.me/haskell_tg
Собеседования и карьера:
DS собеседования: t.me/machinelearning_interview
Python собеседования: t.me/python_job_interview
Папка с вакансиями: t.me/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy
Папка ML: https://t.me/addlist/2Ls-snqEeytkMDgy
Папка Frontend: https://t.me/addlist/mzMMG3RPZhY2M2Iy
Полезное сверху:
ИТ-мемы: t.me/memes_prog
Английский для программистов: t.me/english_forprogrammers
ИИ и технологии: t.me/vistehno
954 ГБ open-source курсов: https://t.me/+rKBQEMccAA01MTcy
ИТ-книги бесплатно: https://t.me/addlist/BkskQciUW_FhNjEy
Max Ai: https://max.ru/ai_machinelearning_big_data
Max python: https://max.ru/pythonl
ТЕХНО: https://max.ru/vistehno
Max Go: https://max.ru/Golang_google
Max Linux: https://max.ru/linuxkalii
Devops: https://max.ru/DevOPSitsec
C#: https://max.ru/csharp_ci
C++: https://max.ru/cpluspluc
SQL: https://max.ru/sqlhub
Java: https://max.ru/javatg
Подписывайся на нужные направления и собирай себе ленту, которая реально двигает вперёд. | 1 925 |
| 10 | 没有文字... | 2 594 |
| 11 | 🛋 C++ реалистично симулирует взрослую жизнь: решил сэкономить на переезде, а всё равно заплатил за копию.
const Sofa mySofa;
Sofa newApartment = std::move(mySofa);
Кажется, диван должен «переехать». Но вызывается конструктор копирования 🤡
Подвох: `std::move` не перемещает объект и не снимает `const`. Здесь он даёт const Sofa&&, а конструктору перемещения Sofa(Sofa&&) нужна ссылка без const.
Зато конструктор копирования Sofa(const Sofa&) подходит.
Даже компилятор знает: переезд без неожиданных расходов не бывает. | 2 176 |
| 12 | Для работы с ИИ полезно иметь несколько моделей под рукой. Но держать ради этого несколько подписок удобно не всем.
Особенно когда сегодня нужен Claude для кода, завтра GPT для другой задачи, а команде ещё нужны общий баланс и понятные расходы.
Для такого сценария есть RouterAI, российская альтернатива OpenRouter. ChatGPT, Claude, Gemini, Grok и сотни других моделей доступны через один веб-чат и OpenAI-совместимый API. Сервис работает без VPN, есть Telegram-бот.
Для разработки предусмотрены инструкции по подключению Claude Code, Codex, Cline и Cursor. Если провайдер модели недоступен, запрос автоматически направляется резервному.
Оплата за использование, без обязательной подписки. Пополнить баланс можно в рублях российской картой или через СБП. Для бизнеса есть оплата по счёту, договор и закрывающие документы. Командам доступны роли, лимиты и статистика расходов.
По данным RouterAI, платформой пользуются десятки тысяч пользователей, включая разработчиков и компании. На сторонних площадках сотни положительных отзывов с оценками около 4,9–5 из 5: например, на Startpack сейчас 372 отзыва и рейтинг 4,9.
Практичный способ попробовать разные модели на своих задачах и платить за фактическую работу.
https://routerai.ru/l/c
#реклама
О рекламодателе
erid: 2W5zFJoafmB | 1 965 |
| 13 | 🎲 Генератор случайных чисел всего в три строки
В 2003 году George Marsaglia предложил семейство генераторов Xorshift — один из самых простых и быстрых PRNG.
Для xorshift32 достаточно буквально трёх операций:
state ^= state << 13;
state ^= state >> 17;
state ^= state << 5;
Новое значение state становится следующим псевдослучайным числом.
Почему это интересно:
- почти нет вычислительных затрат;
- используются только битовые сдвиги и XOR;
- период для ненулевого state — до 2³² − 1;
- отлично подходит для игр, симуляций и других задач, где важна скорость.
Но есть важный нюанс: Xorshift не криптографически стойкий. Для токенов, паролей и security-задач его использовать нельзя.
Красивый пример того, как всего несколько битовых операций превращаются в полноценный генератор псевдослучайных чисел. | 2 432 |
| 14 | 🔥Приглашаем на бесплатный открытый вебинар курса «Электроника и электротехника»:
«Беспроводные STM32. Разрабатываем плату для микроконтроллеров с радиоинтерфейсом»
📆Когда: 21 октября 2026, 20:00 (мск)
Многие разработчики сталкиваются с ситуацией: плата с Bluetooth «работает, но не летает» — дальность связи в разы меньше заявленной в даташите.
Что будет на вебинаре:
• Почему плата с Bluetooth работает на 5 метров, хотя в даташите обещают 50?
• Что такое согласование антенны и почему без него теряется половина мощности?
• Можно ли соединять вывод RF микроконтроллера напрямую с антенной или нужна обвязка?
• Практические рекомендации по трассировке радиочастотных трактов.
• Как адаптировать референс-дизайн под свой стек печатной платы.
Зарегистрируйтесь https://otus.pw/5jPS/?erid=2W5zFGxaSRP
Бесплатное занятие приурочено к курсу «Электроника и электротехника»
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. | 1 047 |
| 15 | 🖥 C++: объект уничтожен, а 16 МиБ всё ещё заняты
std::weak_ptr может удерживать память даже при expired() == true.
Причина в std::make_shared: обычно он размещает объект и управляющий блок в одной аллокации.
В примере на скриншоте массив на 16 МиБ находится прямо внутри Blob. После удаления последнего shared_ptr:
* деструктор объекта вызывается;
* expired() возвращает true;
* общий блок памяти остаётся выделенным, пока существует хотя бы один weak_ptr.
После сброса последней слабой ссылки блок можно освободить.
Что делать: удалять протухшие ссылки из долгоживущих кешей. Для крупных объектов также можно рассмотреть отдельную аллокацию через std::shared_ptr<Blob>(new Blob()).
Нюанс касается размера самого объекта. Если данные хранятся в обычном std::vector, его отдельный буфер освобождается при вызове деструктора.
[Разбор от Microsoft](https://devblogs.microsoft.com/oldnewthing/20230815-00/?p=108602) | 2 797 |
| 16 | 🦀 Что удивляет в C, если первым языком был Rust?
Обычно разработчики переходят от C к Rust. Автор C for Rust Programmers пошёл в обратную сторону и собрал нюансы, которые легко пропустить.
Например, такая функция выглядит как принимающая массив из трёх элементов:
void inspect(char data[3]) {
printf("%zu\n", sizeof(data));
}
Но параметр здесь становится указателем. На платформе с 64-битными указателями увидите 8, а не 3. Длина массива в функцию не передаётся.
Ещё несколько сюрпризов:
• C-строки заканчиваются \0, а strlen() ищет этот байт, проходя по памяти.
• long обычно занимает 64 бита в 64-битных Unix-системах и 32 бита в Windows.
• malloc() может вернуть NULL, а язык не заставит проверить результат.
• Вместо ссылок с проверкой заимствований работают сырые указатели.
Полезное чтение для тех, кто пишет FFI или хочет понять, какие гарантии привычно получает от Rust.
https://bd103.dev/blog/2026-10-07-c-for-rust-programmers/
@rust_code | 2 625 |
| 17 | UTF-8-декодер на C: таблица и несколько строк кода
Бьёрн Хёрманн реализовал декодирование UTF-8 через конечный автомат (DFA). Он обрабатывает байты по одному, собирает кодовую точку Unicode и проверяет корректность последовательности.
Таблица utf8d выполняет две задачи:
* определяет класс очередного байта;
* выбирает следующее состояние автомата.
`ACCEPT` означает, что кодовая точка полностью прочитана. `REJECT` - обнаружена ошибка. Остальные состояния означают, что нужны дополнительные байты.
Подход удобен для потоковой обработки: если символ разорван между двумя сетевыми пакетами, достаточно сохранить состояние и накопленное значение.
Нюанс: после последнего байта тоже нужно проверить состояние. Если оно не ACCEPT, строка некорректна - например, оборвалась посреди символа. | 2 463 |
| 18 | 🖥 Создатель C++ раскритиковал программирование через промпты
Бьярне Страуструп считает естественный язык слишком неоднозначным для точного описания программ. В интервью Райану Петерману он заявил, что ИИ часто создаёт раздутый код с ошибками и уязвимостями, который сложно проверять.
По его словам, изменение промпта может существенно менять реализацию, заставляя опытных разработчиков заново разбираться в результате. Страуструп рассказал, что знает специалистов, которые предпочитают уйти на пенсию, чем заниматься такой проверкой.
Особенно скептически он оценивает ИИ в системах, где критичны безопасность и производительность. При этом признаёт: большая часть мирового кода не относится к этой категории. | 3 436 |
| 19 | Яндекс выложил в опенсорс YTsaurus Flow
YTsaurus Flow - фреймворк потоковой обработки данных с сохранением состояния между событиями, альтернатива зарубежным Spark Structured Streaming и Kafka Streams. Технологию совместно разработали команды Yandex Infrastructure и Яндекс Рекламы для работы с большими потоками данных.
Flow изначально создавался для высоконагруженных real-time систем, прежде всего рекомендательных. Позволяет обрабатывать большие потоки событий с сохранением состояния, гарантией exactly-once и автоматическим распределением нагрузки. Это важно для сервисов, где задержка или потеря данных напрямую влияют на качество рекомендаций, антифрода и других ML-систем: свежие события быстрее доходят до моделей, а инфраструктура продолжает работать при сбоях и изменении нагрузки.
https://github.com/ytsaurus/ytsaurus/tree/main/yt/yt/flow | 3 279 |
| 20 | 🎮 Строка из Quake III, которая выглядит как колдовство
i = 0x5f3759df - (i >> 1); // what the fuck?
Комментарий настоящий. Эта строка помогает вычислить 1/√x, не извлекая квадратный корень. В графике такая операция нужна для нормализации векторов: привести их длину к единице, сохранив направление.
Как работает трюк?
У float внутри есть показатель степени и дробная часть. Если прочитать биты положительного нормализованного числа как целое, получится величина, которая примерно соответствует его логарифму с масштабом и смещением.
А дальше используется свойство:
log₂(1/√x) = −½ × log₂(x)
Сдвиг >> 1 делит целое число на два. Вычитание из подобранной константы меняет знак и компенсирует смещение. Полученные биты снова читаются как float: это уже приближение к ответу.
Один шаг метода Ньютона доводит относительную погрешность примерно до 0,18%. В историческом тесте Криса Ломонта функция работала примерно в четыре раза быстрее прямого вычисления 1.0 / sqrt(x).
А закомментированная строка на картинке? Это второй шаг Ньютона: ещё больше точности за дополнительные вычисления.
💡 Красота алгоритма в том, что само представление числа в памяти становится частью вычисления.
https://github.com/id-Software/Quake-III-Arena/blob/master/code/game/q_math.c | 3 733 |
