Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 比较2个双精度数字,误差可接受-始终显示“0”;“不相等”;_C_Floating Point_Double_Floating Accuracy_Double Precision - Fatal编程技术网

C 比较2个双精度数字,误差可接受-始终显示“0”;“不相等”;

C 比较2个双精度数字,误差可接受-始终显示“0”;“不相等”;,c,floating-point,double,floating-accuracy,double-precision,C,Floating Point,Double,Floating Accuracy,Double Precision,Q:如何检查两个浮点数是否相等 A:您可以这样做: #define EPSILON 0.00000001 int compare(double num1, double num2, double error) { if(fabs(num1 - num2) < EPSILON) return 1; else return 0; } 我也尝试过这样做: static int compare2(double num1, double num2,

Q:如何检查两个浮点数是否相等

A:您可以这样做:

#define EPSILON 0.00000001
int compare(double num1, double num2, double error)
{
    if(fabs(num1 - num2) < EPSILON)
        return 1;
    else
        return 0;
}
我也尝试过这样做:

static int compare2(double num1, double num2, double error)
{
    if(fabs(num1 - num2) <= error)
        return 1;
    else
        return 0;
}

EPSILON-错误
在您的代码中是一个负数


只需将其与
error
进行比较。

EPSILON-代码中的error
是负数


只需将其与
error
进行比较。

不要定义epsilon,而是使用float.h头中定义的DBL\u epsilon进行比较

你错过了错误

它实际上是用0减去最后一个值。所以它是上面的相对误差


签出大小。

不定义epsilon,使用float.h头中定义的DBL\u epsilon进行比较

你错过了错误

它实际上是用0减去最后一个值。所以它是上面的相对误差


签出大小。

数组中有8个元素,而不是10个。以下是您需要的比较功能:

static int compare(double num1, double num2, double error)
{
    if(fabs(num1 - num2) < error + EPSILON)
        return 1;
    else
        return 0;
}
静态int比较(双num1、双num2、双错误)
{
if(fabs(num1-num2)
数组中有8个元素,而不是10个。以下是您需要的比较功能:

static int compare(double num1, double num2, double error)
{
    if(fabs(num1 - num2) < error + EPSILON)
        return 1;
    else
        return 0;
}
静态int比较(双num1、双num2、双错误)
{
if(fabs(num1-num2)
如果fabs(num1-num2),它们不是被认为是相等的吗@Rob:应该是,但我也得到了0,看::(使用你的EPSILON:fabs(num1-num2)检查
fabs
是否正常工作,使用
fabs(-0.7)<1.0
或诸如此类的东西。@mazix:很好!!但我建议你与一些更接近的值进行比较,如
0.75
0.71
。这也会帮助你了解准确度。如果fabs(num1-num2)的话,它们不被认为是相等的吗?罗伯:应该是,但我也得到了0,看:(使用你的EPSILON:fabs(num1-num2)检查
fabs
是否正常工作,使用
fabs(-0.7)<1.0
或类似的东西。@mazix:很好!!但我建议您与一些更接近的值进行比较,如
0.75
0.71
。这也有助于您了解准确性。它确实有效。当两个数字不相等时,您的函数
areEqual
返回零。当我更改时,10.0和9.1之间的间隔大于0.8ge
error
0.9
代码仍然显示
0
…当将error设置为0.9时,您的代码运行并打印1。尝试重建。非常奇怪!看一看:。我重建了它,但仍然得到
0
!为什么?它确实有效。当2个数字不相等时,您的函数
相等
返回零。10.0和9.1更多当我将
error
更改为
0.9
时,代码仍然显示
0
…当设置error为0.9时,您的代码运行并打印1。尝试重建。非常奇怪!看看:。我重建了它,但仍然得到
0
!为什么?
DBL_EPSILON
指定浮点值之间的距离(在某种意义上)不是浮点计算中固有的误差量。它和OP的
EPSILON
可能都不适合于它们试图做的任何事情。
DBL\u EPSILON
指定浮点值之间的距离(在某种意义上),而不是浮点计算中固有的错误量。它和OP的
EPSILON
可能都不适合于他们试图做的任何事情。
static int compare(double num1, double num2, double error)
{
    if(fabs(num1 - num2) < error + EPSILON)
        return 1;
    else
        return 0;
}