如何检查两个浮点数是否相等(使用给定的误差值)?

49 浏览
0 Comments

如何检查两个浮点数是否相等(使用给定的误差值)?

我知道如何检查两个浮点数是否“几乎”相等,简单的代码如下:

bool compare(double a, double b)
{
    if(fabs(a - b) < (1.0 / 10000000))
        return true;
    else
        return false;
}

但是当我有一些随机数据,比如9.0和9.5,或者9.4,我想把它们当作相等的数,怎么办?我的意思是,它们不相等,但是我可以允许一些小误差,+/- 0.5。有什么想法吗?

通过引入这个误差,我可以将以下数字视为相等:

9.1 和 9.0
3.1 和 3.6
-4.2 和 -4.6

0
0 Comments

这段代码的目的是检查两个浮点数是否相等,并且允许给定一个误差值。然而,这段代码存在一些问题。首先,代码中缺少了对(1.0/2)周围的大括号,这对于不太熟悉宏替换的人来说会更容易理解。其次,为什么不将精度作为函数的第三个参数呢?最后,函数签名中的double precision = Mprecision是什么意思?这是C语言吗?

为了解决这些问题,可以对代码进行一些修改。首先,添加大括号来明确表达式的含义。其次,将精度作为第三个参数传入函数。最后,删除double precision = Mprecision这行代码,因为这是一个错误的写法。

以下是修改后的代码:

bool compare(double a, double b, double precision)
{
    if(fabs(a - b) < precision)
        return true;
    else
        return false;
}

这样修改后的代码更加清晰易懂,并且修复了之前存在的问题。现在,可以使用这个函数来检查两个浮点数是否相等,并且允许给定一个误差值。通过调用这个函数,我们可以得到一个布尔值,表示两个浮点数是否相等。

0
0 Comments

问题的出现原因:在比较两个浮点数是否相等时,我们需要考虑计算误差和可接受的误差范围。这是因为浮点数的计算结果可能存在无限大的误差,而且不同的计算可能会产生不同类型的误差,如相对误差、绝对误差或其他复杂的误差函数。因此,我们需要根据具体的计算情况来确定误差范围,而没有通用的规则可循。

解决方法:要解决这个问题,我们需要进一步了解具体的计算和应用目标。如果我们希望比较两个浮点数是否相等,可以通过计算两个数的差值(fabs(a-b))来判断。然而,确定可接受的误差范围是一个复杂的问题。我们需要了解数值的变化范围、样本的标准差等数学模型,并确定一个可接受的概率阈值,然后计算出一个阈值作为比较的依据。

文章整理如下:

在比较两个浮点数是否相等时,我们需要考虑计算误差和可接受的误差范围。这是因为浮点数的计算结果可能存在无限大的误差,而且不同的计算可能会产生不同类型的误差,如相对误差、绝对误差或其他复杂的误差函数。因此,我们需要根据具体的计算情况来确定误差范围,而没有通用的规则可循。

要解决这个问题,我们需要进一步了解具体的计算和应用目标。如果我们希望比较两个浮点数是否相等,可以通过计算两个数的差值(fabs(a-b))来判断。然而,确定可接受的误差范围是一个复杂的问题。我们需要了解数值的变化范围、样本的标准差等数学模型,并确定一个可接受的概率阈值,然后计算出一个阈值作为比较的依据。

在某些应用中,接受不相等的数值作为相等的结果可以减少错误的否定,但会增加错误的肯定。因此,我们需要根据具体的应用情况来确定是否可以容忍这种错误。

总之,要解决这个问题,我们需要考虑计算误差和可接受的误差范围,并根据具体的计算和应用目标来确定比较的依据。这需要一定的数学模型和统计知识,以及对具体应用的理解和分析。如果需要更多指导,我们需要进一步解释我们的计算和目标。

0