gpt4 book ai didi

.net - 为什么 Assert.AreEqual(1.0, double.NaN, 1.0) 通过?

转载 作者:行者123 更新时间:2023-12-03 23:31:22 25 4
gpt4 key购买 nike

简短的问题,为什么 Assert.AreEqual(1.0, double.NaN, 1.0)经过?而Assert.AreEqual(1.0, double.NaN)失败。

它是 MSTest (Microsoft.VisualStudio.QualityTools.UnitTestFramework) 中的错误还是我在这里遗漏了什么?

最好的问候,埃吉尔。

更新:可能应该补充一点,我的问题背后的原因是,由于某些线性代数矩阵运算的结果为 NaN 或 (+/-)Infinity,我有一堆单元测试不幸通过了。单元测试很好,但由于 Assert.AreEqual 对带增量的 double 会在实际或/和预期为 NaN 或 Infinity 时通过,我不得不相信我正在测试的代码是正确的。

最佳答案

当心。 NaN 很奇怪,有点像许多 DBMS 中的 null,您不应该将值与其进行比较(直接或使用 Assert.AreEqual)。来自 Double.NaN 的文档:

Use IsNaN to determine whether a value is not a number. It is not possible to determine whether a value is not a number by comparing it to another value equal to NaN.


double zero = 0;
Console.WriteLine((0 / zero) == Double.NaN); // prints false
Console.WriteLine(Double.IsNaN(0 / zero)); // prints true

您必须查看 Assert(double, double, double) 的内部结构以了解发生了什么,但总的来说,您依赖于相对于 NaN 的未定义行为。

关于.net - 为什么 Assert.AreEqual(1.0, double.NaN, 1.0) 通过?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1780004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com