Использование MPFR и добавление — сколько цифр правильно?

У меня довольно простой вопрос (я думаю). Сколько я ни пытался, я не могу найти ответ на этот вопрос.

Я создаю функцию, для которой я хочу, чтобы пользователь ввел два числа. Первый — это количество членов определенного бесконечного ряда, которые нужно сложить. Второе — это количество цифр, до которого пользователь хотел бы, чтобы усеченная сумма была точной.

Скажем, члены последовательности равны a_i. Какая точность n потребуется в mpfr, чтобы гарантировать, что результат сложения этих a_i от i=0 до введенного пользователем значения будет необходим для гарантированного количества цифр, необходимых пользователю?

Кстати, я наивно добавляю а_и.

Любая помощь будет высоко ценится.

Спасибо,

Рик


person Rick Farr    schedule 09.04.2014    source источник


Ответы (1)


Вы можете преобразовывать десятичные цифры точности d в двоичные цифры точности b с помощью логарифмов.

b = d log(10) / log(2)

Небольшая перестановка показывает, почему

b log(2) = d log(10)
log(2b) = log( 10д)
2б = 10д< / суп>

Каждый член ряда (и каждое добавление) будет приводить к ошибке округления до младшей значащей цифры, поэтому, предполагая, что каждый из членов t включает n (два аргумента) арифметических операций , вы захотите добавить дополнительный

лог(t * (n+2))/лог(2)

биты.

Вам нужно будет округлить количество битов точности в большую сторону, чтобы убедиться, что у вас достаточно места для ваших десятичных цифр точности.

b = ceil((d*log(10.0) + log(t*(n+2)))/log(2.0));

Наконец, вы должны знать, что условия могут привести к ошибкам отмены, и в этом случае этот простой расчет будет резко недооценивает требуемое количество битов, даже если предположить, что я все правильно понял ;-)

person thus spake a.k.    schedule 15.04.2014
comment
Прошу прощения, что не ответил раньше. Большое спасибо за ответ. Это было очень полезно. - person Rick Farr; 21.06.2014