比较浮点值
回答
下面的扩展方法可能是有用的实施凯文的建议:所以现在
public static bool IsEqualTo(this double a, double b, double margin)
{
return Math.Abs(a - b) < margin;
}
public static bool IsEqualTo(this double a, double b)
{
return Math.Abs(a - b) < double.Epsilon;
}
,你可以这样做:
if(x1.IsEqualTo(x2)) ...
if(x1.IsEqualTo(x2, 0.01)) ...
只要改变IsEqualTo
到一个更合适的名称,或更改如果需要,可以使用比double.Epsilon
更好的预设余量。
一般浮点数应该用结构像
if(abs((x1 - x2) < 0.001))
的理由让你引用的警告相比较的是你可以有计算的东西的两种方法,如果你没有舍入误差,他们可以相等,但舍入错误使他们稍有不同。
使用'abs(x1 - x2) <0.001 * x1'而不是 – 2011-01-13 17:39:59
@亚历山大:为什么?如果你能给我们一些解释,会有帮助。 – shuhalo 2011-03-12 15:32:05
@ user411768:这是因为“一般”。一般来说,你比较相对精度,而不是绝对的。如果x1和x2的数量级为10^-6,但是x1的数量是x2的五倍呢?你当然不希望上面的结构告诉你,x1 == x2。有些情况下绝对精度是正确的。这个问题很难。 – 2011-03-12 16:26:02
“最佳方法”取决于您想要比较数字的原因。一般来说,如果你认为你想检查2个浮点数是否相等,你做错了什么。
浮点数字应该被用来表示真实值,在这个词的两个意义上。这个对象与这个其他对象的长度是否相同?那么,它们看起来可能相同,但是如果你有足够好的测量设备,你总能找到一个差异。同样,两个浮点数永远不会相等,除非它们测量的是相同的东西,并且已经以完全相同的方式处理。除此之外,这只是系统中某个地方的舍入错误。
您可能想要检查它们是否接近(比某个阈值更接近),如其他答案所暗示的那样,但不相等。
- 1. 比较浮点值
- 2. 浮点运算和浮点值比较
- 3. C# - 比较浮点值
- 4. 浮点比较
- 5. 浮点比较
- 6. 比较积分值和浮点值
- 7. 比较浮点数
- 8. C++浮点比较
- 9. 比较浮点数
- 10. Python浮点比较
- 11. 在bash中比较浮点值
- 12. 德尔福 - 比较浮点值
- 13. 精确值的双/浮点比较
- 14. Python浮点列表值比较
- 15. 浮点值的比较失败
- 16. 比较C中的浮点值
- 17. 如何比较mongodb中的浮点值?
- 18. 不断赋值的浮点比较
- 19. 问题与浮点比较
- 20. qmake中的浮点比较
- 21. 浮点比较`一个= 0.7`
- 22. 浮点数和零比较
- 23. 比较浮点变量
- 24. 比较浮点数0
- 25. 比较浮点数整数
- 26. x86汇编:浮点比较
- 27. 击比较浮点数
- 28. javascript中的浮点比较
- 29. FCOM浮点比较失败
- 30. 比较to_char与浮点数
你能解释为什么你需要比较它们吗?或者你只是对这个文档感兴趣? – rjmunro 2012-05-28 17:18:43
可能的重复[我应该如何做浮点比较?](http://stackoverflow.com/questions/4915462/how-should-i-do-floatingpoint-comparison) – Magnus 2015-05-11 08:46:27