现在我的问题是,计算机程序会在没有任何逻辑原因的情况下突然出错吗?
如果您完全具有相同的计算环境,那么给一个程序输入X总是会产生相同的结果R。实际上,很少有一个程序单独执行。今天最简单的应用程序运行在操作系统中,并与可能同时“加载”在内存中的其他程序共享内存。这些程序可能以使给定程序发生故障的方式更改内存。例如,这是“指针”类型变量的一个著名问题。通常,此类错误会导致系统异常行为,而不会导致错误的计算结果。
对于您的情况,我认为问题可能是(通常不是)我上面描述的问题。问题可能是:
- 程序使用了错误的数据类型来计算结果,该错误仅在使用特殊值时才会显现出来。
- 程序在计算中遇到了错误(由于逻辑条件),但没有处理该错误,仍然产生了结果。(例如,将浮点数和整数算术混合)
- 业务规则或逻辑条件未正确编码,输入的数据表示此条件,但使用了错误的计算。(例如,在先检查帐户中的金额之前,先从帐户金额中减去金额)。
- 使用仅适用于特定范围数字但数据包含不同范围的公式。(例如,根据一系列值计算利率)
由于上述以及许多其他原因,软件人们花费大量资源来尝试创建正确的软件,但是,软件错误仍然会发生,但是这些错误是“逻辑的”并且是有原因的,只是原因不明显一些没有好的研究。因此,通常来说,经过测试的软件是可预测的,不会产生随机结果。由于某些程序的复杂性和其他因素,即使经过测试的程序也可能出错,但是当发生这种情况时,错误是出于逻辑原因。
如果我猛击服务器计算机,计算机正在计算的数字之一会变成另一个数字并使计算错误吗?
答案通常是否定的,从这个意义上说,软件并不脆弱。
您可以做的是隔离发生错误的情况,找到导致错误的这些数据集之间的相似性,并找出这些错误集与产生正确结果的其他错误集之间的差异。您可能能够识别出导致问题的一组特定值。例如,您可能会发现,变量每次具有负值时,结果都是错误的。
有关内存损坏错误的更新信息:请参阅内存损坏