gpt4 book ai didi

c++ - 比较 C++ 中的两个浮点变量

转载 作者:行者123 更新时间:2023-11-30 01:34:37 25 4
gpt4 key购买 nike

我已经阅读了多篇关于浮点变量比较的文章,但未能理解并从这些文章中获得所需的知识。所以,我在这里发布这个问题。

比较两个浮点变量的好方法是什么?下面是代码片段:

#define EPSILON_VALUE 0.0000000000000001

bool cmpf(float A, float B)
{
return (fabs(A - B) < EPSILON_VALUE);
}

int main()
{
float a = 1.012345679, b = 1.012345678;

if(cmpf(a, b))cout<<"same"<<endl;
else cout<<"different"<<endl;

return 0;
}

输出:相同,尽管两个 float 变量持有不同的值。

最佳答案

对于比较包含先前操作错误的 float ,没有通用的解决方案。必须使用的代码是特定于应用程序的。因此,要获得正确的答案,您必须更具体地描述您的情况。

潜在的问题是使用不正确的数据执行正确的计算通常是不可能的。如果您想计算两个精确数学值 xy 的函数,但您拥有的唯一数据是一些计算不精确的值 xy,一般不可能计算出完全正确的结果。例如,假设您想知道总和 x+y 是多少,但您只知道 x 是 3 和 y 是 4,但您不知道真正准确的 xy 是多少。那么你无法计算 x+y

如果您知道xy 大约 xy ,然后您可以通过添加 xy 来计算 x+y 的近似值。当正在计算的函数(本例中的 +)具有合理的导数时起作用:稍微改变具有合理导数的函数的输入会略微改变其输出。当您要计算的函数具有不连续性或大导数时,此方法将失败。例如,如果您想使用近似值 x 计算 x(在实数域中)的平方根,但 x 可能是负数,因为到先前的舍入错误,然后计算 sqrt(x) 可能会产生异常。同样,比较不平等或秩序是一个不连续的函数:输入的轻微变化可以完全改变答案(从假到真或反之亦然)。

常见的错误建议是与“宽容度”进行比较。该方法将假阴性(如果比较精确的数学值,则不正确地拒绝满足比较的数字)换成假阳性(不正确地接受不满足比较的数字)。

应用程序是否可以容忍错误接受取决于应用程序。因此,没有通用的解决方案。

要设置的公差级别,甚至计算公差的性质,取决于数据、错误和之前的计算。因此,即使与容差进行比较是可以接受的,使用的容差量以及如何计算它也取决于应用程序。没有通用的解决方案。

关于c++ - 比较 C++ 中的两个浮点变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56039679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com