2017-01-09 12 views
10

Я сделал программу Python 3 для вычисления pi для школьного проекта, но она всегда останавливается на 16 десятичных знаков. Есть ли ограничение на длину чисел в python? Если это так, то язык, который я мог бы использовать, позволит мне продолжить?Существуют ли ограничения числа в python?

accuracy = int(input("accuracy: ")) 

current = 2 
opperation = "+" 
number = 3 
count = 1 

for i in range (accuracy): 
    if opperation == "-": 
     number = number - (4/(current*(current+1)*(current+2))) 
     opperation = "+" 
    elif opperation == "+": 
     number = number + (4/(current*(current+1)*(current+2))) 
     opperation = "-" 
    current += 2 
    print(str(count).zfill(8)) + ": " + str(number) 
    count += 1 
+2

Используйте модуль 'decimal', чтобы избежать ограничений длины и, что важно для вашего случая, чтобы избежать неточности с плавающей запятой. –

+0

Существует предел точности, которую вы можете получить с числом с плавающей запятой заданного размера. Но Python позволит вам показывать больше цифр: 'from math import pi; print (format (pi, '.32f')) '. – jonrsharpe

+0

Если вы хотите точно знать, что такое спецификации для поплавков в вашей системе, 'import sys; print (sys.float_info) ' –

ответ

9

Нет ограничений, если вы работаете с целыми числами и Python 3.x. Однако точность, которую вы получаете с использованием чисел с плавающей запятой, ограничена. A Python float (например, 3.14) - это действительно C double, который, как вы говорите, имеет около 16 десятичных знаков точности.

Вы можете использовать модуль decimal для создания и работы с другими числами с плавающей запятой с произвольной точностью. Пример кода:

# Normal Python floats 
a = 0.000000000000000000001 
b = 1 + 2*a 
print(b) # Prints 1.0 

# Using Decimal 
import decimal 
decimal.getcontext().prec = 100 # Set the precision 
a = decimal.Decimal('0.000000000000000000001') 
b = 1 + 2*a 
print(b) # Prints 1.000000000000000000002 

См the docs для получения дополнительной информации о decimal.

+0

Обратите внимание, что использование десятичной дроби будет медленнее, чем построенная - в числах с плавающей запятой. – Richard

+2

@ Рихард Действительно. Хотя в Python 3.3 модуль 'decimal' был [ускоренным] (https://docs.python.org/3/whatsnew/3.3.html#new-decimal) в 100 раз! Для более новых версий Python это не должно быть проблематично медленным. –

+0

Я думаю, стоит заметить, что в документации десятичного модуля есть рецепт для вычисления pi – Copperfield

 Смежные вопросы

  • Нет связанных вопросов^_^