Я хотел бы предложить функцию, которая позволяет вам оценить вашу максимальную точность для данной операции методом грубой силы:
def find_optimum(a,b, max_iter):
for i in range(max_iter):
print(i)
c = int((a+b)/2)
decimal.getcontext().prec = c
try:
dummy = decimal.Decimal(1)/decimal.Decimal(7) #your operation
a = c
print("no fail")
except MemoryError:
print("fail")
dummy = 1
b = c
print(c)
del dummy
Это просто вдвое сокращает интервалы один шаг за раз и выглядитесли произошла ошибка.Вызов с max_iter=10
и a=int(1e9), b=int(1e11)
дает:
>>> find_optimum(int(1e9), int(1e11), 10)
0
fail
50500000000
1
no fail
25750000000
2
no fail
38125000000
3
no fail
44312500000
4
fail
47406250000
5
fail
45859375000
6
no fail
45085937500
7
no fail
45472656250
8
no fail
45666015625
9
no fail
45762695312
Это может дать приблизительное представление о том, с чем вы имеете дело.Это заняло примерно полчаса на i5-3470 и 16 ГБ ОЗУ, так что вы действительно использовали бы его только для тестирования.
Я не думаю, что существует точный способ получить максимальную точность для вашей операции, так как вам нужно было бы точно знать зависимость использования вашей памяти от потребления памяти.Я надеюсь, что это поможет вам, по крайней мере, немного, и я действительно хотел бы знать, для чего вам нужна такая точность.
РЕДАКТИРОВАТЬ Я чувствую, что это действительно нужно добавить, так какЯ читаю ваши комментарии под постом с самым высоким рейтингом здесь.Использование произвольно высокой точности таким способом - это не тот способ, которым люди вычисляют константы.Вы могли бы запрограммировать что-то, что будет разумно использовать дисковое пространство (например, вычислять кучу цифр в ОЗУ и записывать эту кучу в текстовый файл), но никогда не использовать только RAM / swap, потому что это всегда будет ограничивать ваши результаты.С современными алгоритмами для вычисления числа пи вам не нужно бесконечное ОЗУ, вы просто вставляете в машину еще один жесткий диск объемом 4 ТБ и позволяете ему записать следующие цифры.Что касается математических констант.
Теперь о физических константах: они не точны.Они полагаются на измерение.Я не совсем уверен, atm (будет редактировать), но я думаю, что физическая константа самая точная имеет ошибку 10 ** (- 8).Прибавляя к этому больше точности, это не делает его более точным, вы просто вычисляете больше неправильных чисел.
В качестве эксперимента это была забавная идея, поэтому я даже опубликовал ответ в первую очередь..