如何生成逗号后面有无限位数的python变量

如何生成逗号后面有无限位数的python变量,python,Python,我正在处理python中的一个数学悖论,我需要数字变量100%准确,我希望变量/数字不受逗号后面数字的限制。如果我的英语不好,我很抱歉,谢谢你的帮助 addition = 0.5 time = 0 lengthWalked = 0 nr = 0 while True: nr += 1 time += addition lengthWalked += addition addition = ad

我正在处理python中的一个数学悖论,我需要数字变量100%准确,我希望变量/数字不受逗号后面数字的限制。如果我的英语不好,我很抱歉,谢谢你的帮助

    addition = 0.5
    time = 0
    lengthWalked = 0
    nr = 0
    while True:
        nr += 1
        time += addition
        lengthWalked += addition
        addition = addition / 2
        print("nr: ",nr,"time: ",time,"Length walked: ",lengthWalked)
这段代码的作用是加上0,5,然后加一半,或者0,25,然后加0125。你明白了。如果变量可以容纳无限多个数字,那么它将永远继续添加一半数量,永远不会达到1,但它只添加53次数字,在54次时达到1


如果您想知道,是的,这是基于Zeno的悖论,没有任何物理计算机可以容纳无限的数据,但是您可以通过使用
分数
模块获得进程内存极限的高精度:

>>> from fractions import Fraction
>>> walked = Fraction(0)
>>> addition = Fraction(1,2)
>>> while True:
...     walked += addition
...     print(walked)
...     addition /= 2
...
1/2
3/4
7/8
15/16
31/32
63/64
127/128
255/256
511/512
1023/1024
2047/2048
4095/4096
8191/8192
#snip...
35835915874844867368926665039455365204129607103827921929128897517135717358887465018319582487209796698111/35835915874844867368919076489095108449946327955754392558399825615420669938882575126094039892345713852416
71671831749689734737853330078910730408259214207655843858257795034271434717774930036639164974419593396223/71671831749689734737838152978190216899892655911508785116799651230841339877765150252188079784691427704832
143343663499379469475706660157821460816518428415311687716515590068542869435549860073278329948839186792447/143343663499379469475676305956380433799785311823017570233599302461682679755530300504376159569382855409664
将解决您的问题,然后:

>>> from sympy import symbols, summation, oo
>>> i, n = symbols('i n', integer=True)
>>> f = lambda n: summation(1/2**i, (i, 1, n))
>>> f(n)
-2*2**(-n - 1) + 1
>>> 1 - f(n)
2*2**(-n - 1)
>>> f(n) < 1
True
>>> f(1000)
10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069375/10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376
>>> f(oo)
1
>从Symphy导入符号、求和、oo
>>>i,n=符号('i n',整数=真)
>>>f=λn:总和(1/2**i,(i,1,n))
>>>f(n)
-2*2**(-n-1)+1
>>>1-f(n)
2*2**(-n-1)
>>>f(n)<1
真的
>>>f(1000)
10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069375/10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376
>>>f(oo)
1.
所以是的,
f(n)

  • 对于任何
    n
  • 对于任何
    n
  • 允许1作为
    n->∞

您的问题是??您需要inf数字来保存这样的数字。因为你最多可以有128个浮点,所以最小的差值只能是2**-128,这必须是象征性的,而不是数字上的。如果按数字计算,最终会耗尽内存,然后耗尽存储空间,最后耗尽宇宙中的原子。十进制可以达到任意精度,但不能达到“无限”精度,因为没有无限的计算资源(在本例中为内存)。记住,计算机本质上是机器,而不是魔法。在计算机的世界里,无限的浮动毫无意义。如果一个数字有无限的数字和小数,计算机将不断地生成它,直到它最终烧毁处理器。。。