C# MS测试中的double.NaN等式
为什么我会得到这个结果C# MS测试中的double.NaN等式,c#,mstest,nan,C#,Mstest,Nan,为什么我会得到这个结果 [TestMethod] public void nan_test() { Assert.AreEqual(1, double.NaN, 1E-1); <-- Passes Assert.AreEqual(1, double.NaN); <-- Fails } [TestMethod] 公共无效nan_测试() { Assert.AreEqual(1,double.NaN,1E-1);您可以将此测试用于NaN吗 double.Is
[TestMethod]
public void nan_test()
{
Assert.AreEqual(1, double.NaN, 1E-1); <-- Passes
Assert.AreEqual(1, double.NaN); <-- Fails
}
[TestMethod]
公共无效nan_测试()
{
Assert.AreEqual(1,double.NaN,1E-1);您可以将此测试用于NaN吗
double.IsNaN(somenNumber)
请看这里:
编辑:
在VS2008的Microsoft.VisualStudio.QualityTools.UnitTestFramework中,Assert.AreEqual
中肯定有一个bug,它的代码是
if (Math.Abs((double) (expected - actual)) > delta)
{
// report error
}
在您的例子中,Math.Abs((double)(预期-实际))
是一个double.NaN
,当您使用Assert.AreEqual(1,double.NaN)
时,比较会产生false
:-),它会尝试对数字进行相等测试,当然会失败,因为double.NaN
不等于任何东西
当您执行Assert.AreEqual(1,double.NaN,1E-1)
时,它必须对数字进行算术运算。具体来说,它计算
Math.Abs((double) (expected - actual)) > delta
Math.Abs(1 - double.NaN) > 1E-1
Math.Abs(double.NaN) > 1E-1 // All arithmetic with double.NaN returns double.NaN
double.NaN > 1E-1 // All comparisons with double.NaN return false (except !=)
这是错误的。看起来实际的增量不大于您传递的增量
,只是因为它试图指示您无法执行比较
故事的寓意:楠的行为相当疯狂(但一些聪明人能想出的最好的)。在执行任何不能让错误无声传播的计算之前,请尽最大努力检查NaN,如下图所示。非常好,谢谢。该问题的答案似乎与我的问题完全相同,奇怪。是的,但如果我只是运行测试而不使用exp进行调试,我不希望我的结果是NaNected值,它将通过。不好。Microsoft错误条目:请参阅的可能重复项