c# - 在 .Net 运行时为测试用例散列 float

标签 c# .net testing hash floating-point

我有复杂的几何实体测试用例。通过在视口(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/

相关文章:

c# - ASP.NET DropDownList SelectedIndex 在第一个元素上未更改

c# - 在不等待的情况下调用异步方法

jquery - 如何使用 webdriverio、mocha 和 phantomjs 测试将字段设置为空字符串?

visual-studio - 测试 500 个登录用户,其中 50 个用户实际在做某事

c# - NHibernate 是否仍在为 .NET 积极开发

maven - [Cucumber][JVM][Maven]测试不会通过 Maven 从命令行运行

c# - 使用 X-ALT-DESC/将 HTML 应用于 Outlook 中的日历邀请

c# - 程序员真的应该关心在 .NET 中创建对象的数量和/或频率吗?

c# - 如何将 XML 文件内容映射到 C# 对象

c# - P/Invoke - 结构参数的简单添加