我目前正在开发一个用 C++ 和 C# 编写的(遗留)程序;它执行一些重量级计算,但应该是完全确定的。即相同的输入将产生相同的输出...问题是 2 次运行(在同一台计算机上,使用相同的编译可执行文件)产生略有不同的输出。
应用程序读取和写入 SQL 服务器数据库(它具有对数据库的唯一访问权限,因此不应有其他任何东西干扰数据库值)。
运行之间唯一明显的区别是它们都被分配了一个唯一的名称(只是一个字符串变量)。
代码中没有随机对象,所有循环运行预定的迭代次数或直到满足条件,它们不会运行一定的时间。有少量的多-threading,我确信它是线程安全的,但我会自己检查一下。
是否有任何其他明显的事情我应该寻找,这会导致这种异常行为?
最佳答案
我想到了两个想法:
- 未初始化的变量。
- 浮点运算不是关联的。
后一点会在多线程下产生机器精度水平差异。不过,它更有可能是未初始化的变量!
关于c# - 确定性应用程序中的偏差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5747072/