在Release模式和debug模式下运行时,我们有一些单元测试失败.如果我在发布模式下附加调试器,则测试通过.有太多的代码要在这里发布,所以我真的只是在寻找调试发布模式问题的最佳实践.我检查过:
解决方案:在这种情况下,这是因为我在比较浮点变量是否相等.如果没有重大的重构,我无法将浮点数更改为十进制,所以我添加了一个扩展方法:
public static class FloatExtension
{
public static bool AlmostEquals(this float f1, float f2, float precision)
{
return (Math.Abs(f1 - f2) <= precision);
}
public static bool AlmostEquals(this float f1, float f2)
{
return AlmostEquals(f1, f2, .00001f);
}
public static bool AlmostEquals(this float? f1, float? f2)
{
if (f1.HasValue && f2.HasValue)
{
return AlmostEquals(f1.Value, f2.Value);
}
else if (f1 == null && f2 == null)
{
return true;
}
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
由于它似乎与浮点相关,因此有很多事情可能会出错。请参阅: C# - 32 位和 64 位上的数学运算结果不一致 以及 .NET 上的双精度问题
有很多东西可以用浮点来破坏。比较浮点数是否相等是一个普遍的禁忌。您应该检查小于合理 epsilon 的差异。
| 归档时间: |
|
| 查看次数: |
6224 次 |
| 最近记录: |