Python中是否存在数字限制?

10

我为学校项目制作了一个计算圆周率的Python 3程序,但它总是在小数点后16位处停止。 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 模块可以避免长度限制,更重要的是可以避免浮点数不精确的问题。 - juanpa.arrivillaga
浮点数的精度受其所占空间大小的限制。但是Python可以显示更多位数:from math import pi; print(format(pi, '.32f')) - jonrsharpe
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - juanpa.arrivillaga
请注意,@jonrsharpe,在初始16位数字之后的所有内容都是错误的。额外的数字与π完全无关。 - jmd_dk
1
“使用给定大小的浮点数,您可以获得的精度是有限的。” - 我刚开始就说了这个! - jonrsharpe
这是一台计算机,因此它使用二进制小数进行计算,精度限制为55位。当您不包含额外的格式提示时,Python会将结果四舍五入到最近的十进制小数,并再次四舍五入到较短的数字,以便您的屏幕不会太杂乱。这里有一篇不错的阅读材料:15.浮点数算术:问题和限制 - tdelaney
1个回答

10

如果你在Python 3.x中使用整数,没有任何限制。但是浮点数的精度是有限的。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

请查看文档以获取有关decimal的更多信息。


请注意,使用十进制会比使用内置的浮点数慢。 - Richard
2
@Richard 的确。不过在 Python 3.3 中,decimal 模块的速度提高了约100倍!对于更新版本的 Python,它因此不应该有速度问题。 - jmd_dk
我认为值得注意的是,在十进制模块的文档中,有一个计算圆周率的方法。 - Copperfield

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接