Нужно вычислить выражение вот такого вида с точностью 3-4 знака

после запятой: (a * C(0, n) + b * C(1, n) + ... + z * C(n, n))/2^n, n до 50k. есть какие-нибудь идеи, как это сделать, не вылезая в длинную арифметику?

11 ответов

21 просмотр

Как быстро растет C(a, b)?

tiom4eg-🇷🇺 Автор вопроса
SNEJANA ONE LOVE
Как быстро растет C(a, b)?

достаточно быстро, C(25000, 50000) = ~1e15000 (максимальное значение при данных условиях)

tiom4eg 🇷🇺
достаточно быстро, C(25000, 50000) = ~1e15000 (мак...

Ага... Ну вообще 1e15000 ~ 2^25000 Здесь сложно что-либо говорить, оно с трудом в quadruple precision влезает... Разве что смотреть, не сокращается как-нибудь C(2

tiom4eg-🇷🇺 Автор вопроса
SNEJANA ONE LOVE
Ага... Ну вообще 1e15000 ~ 2^25000 Здесь сложно чт...

есть вариант банально запихать в дабл эти 1e15000, но тогда точность умирает, даже 3 знака верно не выводит 😞

tiom4eg 🇷🇺
есть вариант банально запихать в дабл эти 1e15000,...

А там точно нигде ничего не сокращается? потому что иначе без длинной арифметики никак..

tiom4eg-🇷🇺 Автор вопроса
SNEJANA ONE LOVE
А там точно нигде ничего не сокращается? потому чт...

C(0, n) + ... + C(n, n) = 2^n, но дальше всё ломается, т.к. у каждого слагаемого свой множитель. хотя, наверное стоило упомянуть, что множители отсорчены по неубыванию (a <= b <= c <= ... <= z)

Если я нигде не ошибся: 1. Вычитаем и прибавляем к числителю сумму a * (C(0, n) + .. + C(n, n)). Тогда a * C(0, n) сокращается, остальное преобразуются в (b - a) * C(1, n) + (c - a) * C(2, n) + .., вне дроби оказывается + a. 2. Вычитаем и прибавляем в числителе (b - a) * C(0, n) - вычтенное выносим из дроби как -(b-a)*C(0, n)/2^n. N. Смотрим на полученную дробь и повторяем шаги 1-2, но уже не для a, а для b-a.

tiom4eg-🇷🇺 Автор вопроса
Alexander Karaev
Если я нигде не ошибся: 1. Вычитаем и прибавляем к...

хорошая идея, спасибо, рассмотрю её подробнее

наивно считать в double не работает? (опционально с https://en.wikipedia.org/wiki/Kahan_summation_algorithm)

tiom4eg-🇷🇺 Автор вопроса
Vladislav 🇺🇸🚜
наивно считать в double не работает? (опционально ...

Не, пытался, точности не хватает на 3 знака

Похожие вопросы

Обсуждают сегодня

Всем привет Есть достаточно базовая задача: Дан неориентированный граф. Требуется определить, есть ли в нем цикл, и, если есть, вывести его. Входные данные подаются в виде ма...
Αλeksandr
10
Привет всем. Подскажите, как можно данную задачу более менее эффективно решить? В столовой одного известного Завода вот-вот начнётся обед. На обеде есть три гарнира — макарош...
Vitaliy
6
всем привет. У меня есть неупорядоченный массив точек(в моем случае в трёхмерном пространстве). Есть критерий связанности точек: если евклидово расстояние между ними меньше за...
Павлик Ливаткин
31
Доброе утро. Такой вопрос: есть ли какие-то практически полезные меры вычислительной мощности (в смысле computational complexity) для реальных машин, с ограниченными ресурсам...
Yaroslav Schekin
15
Всем привет Пытаюсь решить следующую задачу: https://informatics.msk.ru/mod/statements/view.php?id=6992&chapterid=101#1 Строка S была записана много раз подряд, после чего из ...
Αλeksandr
10
Здравствуйте. Есть задача нужно найти наименшое число P где фактриал P делиться на 10^N. Ограничения 10^9. Знаю что нужно найти такой P в конце как минимум N нулей. Решение с ...
. Azmiddin
20
Друзья, практический вопрос надо счиать скользящую медиану в последовательности по заданному окну (длины N) тупой вариант - взять значения в окне, отсортировать, взять элеме...
Стас Выщепан
17
Должна-ли работать такая стратегия: Мы каждую секунду бросаем монетку - орел или решка. Если орел - покупаем акцию на все деньги, если у нас есть деньги, или продаем все акци...
George Polevoy
13
#pragma once #include <iostream> #include <vector> template <typename T, typename Comp = std::less<T>> class Heap { public: Heap() = default; Heap(const std::vector<T>&...
Степан
1
Как можно сжимать временные ряды в памяти? У меня есть исторические стоимости ценных бумаг. Данные для каждой минуты в истории OHLC (Open, High, Low, Close). Соответственно, O...
George Polevoy
10
Карта сайта