我有复杂的几何实体测试用例。通过在视口(viewport)中查看生成的几何图形,我可以很容易地直观地验证测试用例是否已通过。
当我对测试通过感到满意时,我对几何进行哈希处理。
var hashCode = GetHashCodeForRegionResult(region);
hashCode.Should().Be(1243932659);
计算涉及对 float 进行哈希处理。通常这是一件坏的事情。但是,如果我将相同 数据输入到算法中,那么我会期望在位级别上得到完全相同的结果。这种期望是否有效,尤其是当我在 .Net 4.5.1 运行时中在不同 CPU、AMD 与 INTEL、64 位与 32 位上运行相同的测试时?
最佳答案
假设一切都是相同的,那么您会期望即使是浮点运算也是确定性的,并产生相同的结果……除非您最终发现硬件或软件中的错误。
众所周知, float 对执行顺序的变化非常敏感,即使(尤其是!)这在数学上是无关紧要的。如果版本之间的库存在细微差异,则可能会产生细微差异,通常小到无法注意到。
所以,是的,从理论上讲,人们可以想象结果可能会发生变化的方式。但在实践中结果将相同的基础上继续进行是合理的(恕我直言)——但如果存在细微差异,也不要大意。
关于c# - 在 .Net 运行时为测试用例散列 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25038530/