【发布时间】:2021-12-05 01:22:15
【问题描述】:
我最近对运行一段代码感到惊讶,该代码需要数小时才能运行多个进程,并且每次都得到完全相同的数值结果。也许只是我将计算机拟人化,但它似乎令人印象深刻。
我的意思是一个程序的结果不是基于初始条件和语言规则的程序的结果。这必须是由随机错误引起的,可能是宇宙辐射噪声或其他原因。我说的是 2+2=5,而不是人类编写糟糕的代码。如果你再次运行它,使用相同的代码和初始条件,它会给出正确的结果(假设错误不太可能但并非不可能)。
我知道这种事情在计算机中是可能的 (How often do computers make mistakes?),但听起来不太可能。那么 Python 本身是否内置了某种冗余,或者是在更深层次上内置的?在您认为一个错误之前可以完成多少次浮点运算?
奖励:其他语言呢?从这个意义上说,有没有一些比其他的更可靠?
【问题讨论】:
-
归根结底,计算机是确定性的。您提到了浮点运算,以及它们的错误是如何累积的,但是在给定的系统上,相同的浮点运算总是会产生相同的结果——它们产生的错误只有在您拥有多个系统并且您拥有多个系统时才会变得相关。重新尝试达成共识。就我目前所能想象的而言,他们“搞砸”的唯一方法是,就像你说的,通过硬件故障或外力(辐射等)
-
是的,这就是我想知道的——来自热噪声、量子效应、辐射噪声等的错误,就像链接中谈到的那样。这有多普遍?存在什么样的冗余来对抗它?
-
@ThomasDewitt 我实际上看到了来自 Veritasium 的一个相对较新的视频,他非常好地谈论它。 youtube.com/watch?v=AaZ_RSt0KP8&ab_channel=Veritasium
-
python 中根本没有冗余来对抗位错误。您提供的链接为您问题的其余部分提供了信息。
-
我投票结束这个问题,因为它不是一个编程问题。更有可能的问题是您的代码中存在错误,但如果您认为这是语言或硬件的问题(两者都极不可能),我们无法帮助您修复这些错误。
标签: python architecture