使用python测试-1/12异常

使用python测试-1/12异常,python,math,optimization,physics,Python,Math,Optimization,Physics,所以我看到了Numberphile制作的这个奇妙的东西,他们解释说,如果你把所有的自然数相加,你会得到-1/12的答案 我想,为什么不试着用电脑检查一下呢,我想出了一个代码: num1 = 1 num2 = 2 while True: result = num1 + num2 num1 += 1 num2 += 1 print(f'cycle #{num2} passed... \nresult is {len(str(result))} digits long

所以我看到了Numberphile制作的这个奇妙的东西,他们解释说,如果你把所有的自然数相加,你会得到-1/12的答案

我想,为什么不试着用电脑检查一下呢,我想出了一个代码:

num1 = 1
num2 = 2

while True:
    result = num1 + num2
    num1 += 1
    num2 += 1
    print(f'cycle #{num2} passed... \nresult is {len(str(result))} digits long')
    if result < 0:
        print('wtf?')
        print(f'that was loop # {num2} on which a miracle happened')
        break
这段代码已经运行了大约20分钟,我现在正处于第2100万个周期,我觉得一定有办法加快这些计算,不是吗?有什么想法吗


仅供参考:我对数学中的无限概念很熟悉,只是有点好奇,会离开我的电脑一个星期,所以为什么不试试

您应该先尝试使程序正确,然后再尝试使其快速运行。现在你不是在计算1+2+3+4+5+的累计总和。。。但是一系列成对和1+2,2+3,3+4

像打印这样的输入/输出操作很慢。对于exmaple,每百万或一千万次操作打印一次,可以显著加快计算速度:

if num2 % 1000000 == 0:
    print(f'cycle #{num2} passed... \nresult is {len(str(result))} digits long')

之后,下一个大的优化将来自于从CpPython解释器切换到具有较低开销的东西,如C、C++、PyPy、C、java……如果使用另一种语言,请记住Python中的整数可以任意大。在许多语言中,您需要一个外部库,因为本机整数类型有大小限制。

它在数字上不起作用。要得到-1/12的结果,需要无穷多个自然数。此外,为了使整个过程成为-1/12,您需要将整个系列视为一个对象,而不是一次只处理几个术语。最基本的概念是,你不能在任何一个术语中停止中间的过程来处理事情。你一定在那个数字文件视频中也注意到了。他们从不逐项处理这个系列。无论何时他们操作这个系列,他们都把它作为一个整体,作为一个单一的基本对象来操作。这就是为什么这不能用数值来实现,因为理论概念和对整个无穷级数的不同处理使结果为-1/12。计算机无法理解无限的对象,你无法将这些对象写下来并存储在内存中


抱歉,如果它让你失望了,伙计,否则得到这个结果真的很酷。我也是这种奇怪的数学和数字文件视频的粉丝

这样不行。你误解了无限的含义。当你数到无穷大时,你可以计算出发生了什么,但实际上你不能在那里数数。您永远不会将数字相加到-1/12。即使你让计算机运行数万年,你也不会比开始时更接近于把所有的自然数相加。@Delta_G好吧,谢谢你,就像我最后说的,我明白这一点。下面是一个思考的方法:我只是想让我的电脑忙上一个星期,我在问如何加速这些计算加速它们的目的是什么?越来越接近无穷大?如果你只是想看看你能数到多高,那就这么做吧。但这是你可以计算的。你希望完成什么?你认为你能测试什么?就这一点而言,把所有的自然数相加不是一个好主意吗?你只是把两个越来越大的数字加在一起。此代码不保留任何和值。