<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Math.sumPrecise в Chrome 145: точные суммы для финансов и ML в JS]]></title><description><![CDATA[<p dir="auto">В Chrome 145 появился Math.sumPrecise - метод для точного суммирования чисел в JavaScript. Он решает проблему ошибок плавающей точки, которая мешает в финансовых расчетах и машинном обучении. Теперь суммы массивов чисел вычисляются без потери точности.</p>
<p dir="auto">Обычное сложение в JS часто дает неточные результаты из-за особенностей float64. Например, 0.1 + 0.2 не равно 0.3. Math.sumPrecise использует продвинутый алгоритм, чтобы избежать этого. Это упрощает код и повышает надежность приложений.</p>
<h2>Как работает Math.sumPrecise</h2>
<p dir="auto">Math.sumPrecise принимает итерируемый объект с числами и возвращает их сумму с повышенной точностью. Алгоритм отличается от наивного reduce или цикла for. Он учитывает порядок и компенсацию ошибок округления.</p>
<p dir="auto">Рассмотрим пример: массив [1e20, 0.1, -1e20]. Обычное сложение дает 0, потому что 1e20 + 0.1 округляется до 1e20. Затем 1e20 + (-1e20) = 0. Math.sumPrecise сохраняет малые значения и выдает 0.1. Это критично для финансов, где копейки важны.</p>
<p dir="auto">В ML такие суммы используются для агрегации весов или градиентов. Неточности накапливаются в больших датасетах. Метод работает только с Number, выбрасывая TypeError на BigInt или строки.</p>
<ul>
<li><strong>Плюсы алгоритма</strong>: Компенсирует ошибки округления, работает с пустыми итераторами (возвращает -0).</li>
<li><strong>Минусы</strong>: Медленнее наивного сложения, не для BigInt.</li>
<li><strong>Синтаксис</strong>: <code>Math.sumPrecise([1, 2, 3])</code> вернет 6.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Обычное сложение</th>
<th>Math.sumPrecise</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>[1e20, 0.1, -1e20].reduce((a,b)=&gt;a+b,0)</code> = 0</td>
<td><code>Math.sumPrecise([1e20, 0.1, -1e20])</code> = 0.1</td>
</tr>
<tr>
<td><code>[0.1, 0.2]</code> = 0.30000000000000004</td>
<td><code>[0.1, 0.2]</code> = 0.30000000000000004 (из-за литералов)</td>
</tr>
<tr>
<td>Пустой массив = 0</td>
<td>Пустой = -0</td>
</tr>
</tbody>
</table>
<h2>Применение в финансовых расчетах</h2>
<p dir="auto">В финтехе точность - ключевой фактор. Суммы транзакций, процентов или балансов не терпят ошибок. Math.sumPrecise упрощает код без нужды в библиотеках вроде decimal.js.</p>
<p dir="auto">Представьте расчет итоговой суммы по чеку: тысячи позиций с ценами вроде 0.99. Обычный цикл потеряет гроши из-за накопления ошибок. Метод гарантирует точность до последнего знака. <em>Важно: он не решает проблему представления 0.1, но минимизирует накопление.</em></p>
<p dir="auto">В таблицах Excel или Google Sheets аналогичные проблемы решаются вручную. В JS теперь есть нативное решение. Тестировано в Test262, готово к продакшену.</p>
<ul>
<li>Сумма цен: <code>Math.sumPrecise(цены.map(p =&gt; p * qty))</code> - без потерь.</li>
<li>Проценты: Агрегация ставок по портфелю без ошибок.</li>
<li>Налоги: Расчет НДС или итогов с копейками.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Сценарий</th>
<th>Без Math.sumPrecise</th>
<th>С Math.sumPrecise</th>
</tr>
</thead>
<tbody>
<tr>
<td>1000 транзакций по 0.01</td>
<td>Ошибка ~0.001</td>
<td>Точная сумма</td>
</tr>
<tr>
<td>Баланс счета</td>
<td>Округление в копейках</td>
<td>Полная точность</td>
</tr>
<tr>
<td>Итоговый чек</td>
<td>reduce() = 99.99…</td>
<td>100.00</td>
</tr>
</tbody>
</table>
<h2>Использование в машинном обучении</h2>
<p dir="auto">В ML суммы нужны везде: от батч-нормализации до градиентного спуска. Большие датасеты усиливают floating point ошибки. Math.sumPrecise снижает шум в вычислениях.</p>
<p dir="auto">Например, при усреднении фичей: сумма значений делится на длину. Неточности искажают модель. Метод обеспечивает стабильность на больших объемах данных. <em>Поддержка в V8 через Finch флаг V8Flag_js_sum_precise.</em></p>
<p dir="auto">В TensorFlow.js или простых нейронках это ускорит прототипирование. Не нужно переписывать циклы на Kahan summation. Работает с массивами, Set, Map.values().</p>
<ul>
<li>Градиенты: <code>Math.sumPrecise(градиенты)</code> для обновления весов.</li>
<li>Loss функция: Точная агрегация ошибок по батчу.</li>
<li>Нормализация: Сумма фичей без артефактов.</li>
</ul>
<h2>Поддержка браузеров и миграция</h2>
<p dir="auto">Chrome 145 первым внедряет Math.sumPrecise на десктопе. Safari поддерживает с 26.2, Firefox с 137. Edge и мобильный Chrome отстают.</p>
<p dir="auto">Проверить: <code>typeof Math.sumPrecise !== 'undefined'</code>. Для кросс-браузерности используйте полифилл или фолбэк на reduce. <em>Пустой итерируемый дает -0 для совместимости с FP-идентичностью.</em></p>
<p dir="auto">Миграция проста: замените reduce на Math.sumPrecise в финансовом коде. Тестируйте на примерах с большими и малыми числами. Производительность приемлема для точности.</p>
<ul>
<li><strong>Chrome</strong>: Desktop 145+, Android нет.</li>
<li><strong>Firefox</strong>: 137+.</li>
<li><strong>Safari</strong>: 26.2+.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Браузер</th>
<th>Версия поддержки</th>
</tr>
</thead>
<tbody>
<tr>
<td>Chrome Desktop</td>
<td>145</td>
</tr>
<tr>
<td>Firefox</td>
<td>137</td>
</tr>
<tr>
<td>Safari</td>
<td>26.2</td>
</tr>
<tr>
<td>Edge</td>
<td>Нет</td>
</tr>
</tbody>
</table>
<h2>Точность на практике</h2>
<p dir="auto">Math.sumPrecise реализует алгоритм вроде xsum - с компенсацией ошибок. Он отслеживает низкие биты, не влезающие в mantissa. Для 1000+ чисел разница заметна.</p>
<p dir="auto">В бенчмарках он медленнее наивного на 2-5x, но быстрее ручных Kahan. Идеален для финансов и ML, где скорость вторична точности. Пустой массив - -0, чтобы <code>sum([]) + x == sum(x)</code>.</p>
<p dir="auto">Не для высокопроизводительных циклов вроде игр. Там хватит обычного +. <em>Отвергает не-числа, в отличие от Math.max.</em></p>
<ul>
<li>Финансы: Обязательно.</li>
<li>ML: Рекомендуется.</li>
<li>Общие скрипты: Опционально.</li>
</ul>
<h2>Перспективы развития JS</h2>
<p dir="auto">Math.sumPrecise - шаг TC39 к надежным вычислениям. Stage 3, тесты в Test262. Дальше ждем Math.maxPrecise или BigDecimal. Это меняет правила для числовых задач.</p>
<p dir="auto">В Chrome 145 фокус на десктопе, мобильные платформы позже. Интеграция с WebAssembly возможна, но пока чистый JS. Стоит экспериментировать в проектах с данными.</p>
]]></description><link>https://forum.exlends.com/topic/1566/math.sumprecise-v-chrome-145-tochnye-summy-dlya-finansov-i-ml-v-js</link><generator>RSS for Node</generator><lastBuildDate>Sun, 19 Apr 2026 11:46:41 GMT</lastBuildDate><atom:link href="https://forum.exlends.com/topic/1566.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 10 Mar 2026 12:43:49 GMT</pubDate><ttl>60</ttl></channel></rss>