【问题标题】:What are the chances of a 1 + 1 sum giving the wrong result?1 + 1 和给出错误结果的可能性有多大?
【发布时间】:2020-06-26 06:26:22
【问题描述】:

我知道,尽管我们愿意相信计算机不会出错,但晶体管并不完美,并且 1 + 1 并不总是在晶体管级别返回 2。

我也知道,为了保护我们免受错误的影响,现在大多数计算机都有冗余、错误检测和纠正算法。

话虽如此,以下 C++ 程序在没有警告的情况下打印错误结果的可能性有多大?还有机会吗?

#include <iostream>
using namespace std;

int main()
{
    int a = 1, b = 1;
    int sum = a + b;

    cout << "Sum = " << sum;

    return 0;
}

假设我们使用的笔记本电脑平均价格为 1000 美元,截至 2020 年。

这个问题的范围更广。我们每秒运行数十亿次计算,我想知道一个复杂程序在理论上会出错多少。

【问题讨论】:

  • 尝试在一个循环中运行几个月/几年,看看你是否得到过两个以外的任何东西?当你不知道时,测量和研究它:D
  • 我会将 1 + 1 总和给出错误结果的机会归类为:不太可能
  • 这是个好主意,但如果我这样做了,但从未有任何不同,那并不能证明它不会发生。我可以在测试期间“走运”。无论如何,这个问题的范围更广。我们每秒运行数十亿次计算,我想知道一个复杂程序在理论上会出错多少。
  • 您的笔记本电脑会在没有保护的情况下被送往太空吗?很难计算中子粒子在计算和输出之间的确切时间与保存计算结果的存储单元发生碰撞的“机会”,但它可能会发生。
  • 当然,对于大多数人来说,这是一个“理论”问题;这种错误的自然发生率非常罕见,可以忽略不计。但它实际上是一个实际问题,对于计算机的奇异用途(例如在太空中)以及因为攻击者可能引发错误:诱导故障是攻击安全计算的一种方式,例如尝试学习有关加密密钥的信息.

标签: c++ sum cpu computation-theory computation


【解决方案1】:

是的,1 + 1 有可能产生 2 以外的东西。发生这种情况的可能性非常接近于零,以至于无法衡量。

之所以如此,原因如下:

  1. 首先,在量子级别出现问题的可能性非常低。 IT 中确实存在“故障”一词,但在绝大多数情况下,它是由于某些硬件故障(例如网络电缆没有完美接触)造成的。在软件中观察到故障的其余极少数情况下,它只是用作“我们不太确定为什么会发生这种情况”的另一个术语。这很可能是由于逻辑错误、多线程问题或其他一些非量子效应。由于量子不确定性导致的故障无论如何都不会发生,因此我们的专业需要考虑任何因素。

  2. 您要运行这个小测试程序的计算机系统不断运行执行各种其他功能的兆字节代码,所有这些都依赖于 1+1 或任何其他计算,总是产生正确的结果。如果发生最轻微的事故,计算机就会惨遭严重崩溃。因此,您的微不足道的小程序甚至不需要运行:您的计算机和全球数以亿计的计算机昼夜不停地完美运行证明了 1+1 总是以极高的确定性计算为 2。

【讨论】:

  • 我的问题不仅仅是关于量子层面的问题,而是关于整个“计算机系统”在执行一个非常简单的任务时出错的概率。计算机系统是硬件和软件 (OS) 的总和。
  • 好吧,恐怕那样的话,问题就太宽泛了,无法回答。这取决于软件的复杂性、软件的多样性以及子系统之间的交互、软件运行时的 CPU 负载等。没有人对此有答案,更不用说对消费产品的答案了。在过去几个月内汇总,并每隔几周左右不断收到更新。
  • 我的意思是“平均”。但我明白你的意思!我会把这个问题留一段时间,也许会提供赏金。最有趣的答案将获胜。
  • 关于“如果发生最轻微的事故,计算机将惨遭严重崩溃”:不,许多错误会在短期内被忽视,一些在长期内会被忽视。甚至崩溃也不会很壮观。在许多生产系统中,进程崩溃会导致系统重新启动进程并将其记录为统计信息。计算机和操作系统本身不会崩溃。
  • @EricPostpischil 在一定程度上是正确的,但不足以产生影响。到目前为止,您的计算机执行的最频繁的计算是在将值移入/移出机器堆栈时向堆栈指针添加偏移量,以及向指令指针添加偏移量以跳转到另一个位置。如果其中任何一个失败,您将立即崩溃。如果它们在内核(或内核模式驱动程序)中失败,您将立即收到不可恢复的错误,也称为“蓝屏死机”。
猜你喜欢
  • 1970-01-01
  • 2020-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-24
  • 2020-01-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多