Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MS测试中的double.NaN等式_C#_Mstest_Nan - Fatal编程技术网

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错误条目:请参阅的可能重复项