c# - Double.Epsilon 表示相等、大于、小于、小于或等于、大于或等于

标签 c# epsilon

http://msdn.microsoft.com/en-us/library/system.double.epsilon.aspx

If you create a custom algorithm that determines whether two floating-point numbers can be considered equal, you must use a value that is greater than the Epsilon constant to establish the acceptable absolute margin of difference for the two values to be considered equal. (Typically, that margin of difference is many times greater than Epsilon.)

那么这真的不是可以用于比较的 epsilon 吗?我不太明白 MSDN 的措辞。

它可以用作此处示例中的 epsilon 吗? - What is the most effective way for float and double comparison?

最后这看起来真的很重要,所以我想确保我有一个可靠的相等性实现,大于、小于、小于或等于以及大于或等于。

最佳答案

我不知道他们在写这篇文章时抽的是什么。 Double.Epsilon 是不为 0 的最小可表示非正规浮点值。您所知道的是,如果出现截断错误,它总是更大比这个值。大得多。

System.Double 类型可以表示精确到最多 15 位的值。因此,如果 double 值 x 等于某个常量,则简单的一阶估计是使用常量 * 1E-15

的 epsilon
public static bool AboutEqual(double x, double y) {
    double epsilon = Math.Max(Math.Abs(x), Math.Abs(y)) * 1E-15;
    return Math.Abs(x - y) <= epsilon;
}

不过您必须小心,截断错误可能会累积。如果 xy 都是计算值,那么您必须增加 epsilon。

关于c# - Double.Epsilon 表示相等、大于、小于、小于或等于、大于或等于,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2411392/

相关文章:

c# - 对于 R# 对精度损失的提示,这是一个很好的解决方案吗?

python - 机器 epsilon 的倍数是什么意思?

ios - objective-c : Safe float comparison fails strangely

c# - 创建并显示没有变量引用的表单

c# - MVC4 + async/await + 在 Action 完成前返回响应

c# - 使用正则表达式将给定文本中的现有网址替换为新网址

c# - EPPlus - 保存在内存中创建的 excel 并在 excel 上打开它会出错

时间:2019-03-17 标签:c#Backgroundworkerclass

java - 我可以将 jLabel 的文本设置为符号吗?