2017-02-11 18 views
0

Я пишу программу, которая использует бесконечную сумму для вычисления pi до большого количества десятичных знаков очень быстро, 22 итерации приводят к 15 десятичным знакам. Однако из-за ограничений python это максимальное количество десятичных знаков, которое может быть показано. Поэтому попытайтесь исправить эту проблему, я посмотрел в Интернете и нашел this website, в котором была включена информация о десятичном классе python.Как хранить десятичные значения в виде varible

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

Вот мой код, он отлично работает с из десятичной части:

from decimal import * 
getcontext().prec = 30 

n = 0 
value = 1/2 
while True: 
    n += 1 
    top = 1 
    bottom = 2 ** (2 * n + 1) * (2 * n + 1) * 2 
    for i in range(n): 
     top *= 2 * i + 1 
     if i != 0: bottom *= 2 * i + 2 

    value += Decimal(top)/Decimal(bottom) 
    print(value * 6) 

EDIT: Это ошибка, что я получил:

TypeError: unsupported operand type(s) for +=: 'float' and 'decimal.Decimal' 

Это первый время, с которым я работал с этим классом, и я не уверен, как это сделать.

+0

@StefanPochmann Я обновил свой вопрос –

ответ

2

Да, это потому, что добавление поплавки знаков после запятой не поддерживается, сделать value (float) сначала Decimal:

value = Decimal(1/2) 

ошибка явно рассказывать вам это, говоря, где возникла ошибка, который вызвал оператор и какие типы он получил.

Посмотрите на Decimal FAQ, указанный в документации для decimal, у вас есть вопросы, которые могут вас заинтересовать, если вы работаете с десятичными знаками.

+0

Спасибо, кажется, так просто в ретроспективе! Программа теперь работает по назначению. –

+1

так что теперь вы можете принять ответ :) –

+0

@ Jean-FrançoisFabre Я собирался, но я должен был ждать 10 минут, теперь у меня есть –