【发布时间】: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