21xrx.com
2024-09-20 00:19:26 Friday
登录
文章检索 我的文章 写文章
C++如何判断两个小数是否相等?
2023-07-04 01:54:48 深夜i     --     --
C++ 判断 小数 相等

在C++编程中,判断两个小数是否相等是一个常见的问题。由于精度的问题,当两个小数的值非常接近时,常规的比较方式无法精确比较它们的相等性。下面介绍几种判断小数相等的方法。

1. 绝对误差法:将两个小数的差取绝对值后,与某个给定的绝对误差值进行比较,如果小于等于该误差值,则认为它们相等。代码如下:


bool isEqual(double a, double b, double epsilon) {

  return fabs(a - b) <= epsilon;

}

其中,`epsilon`表示指定的绝对误差值。

2. 相对误差法:将两个小数的差取绝对值并除以它们的平均值,与某个给定的相对误差值进行比较,如果小于等于该误差值,则认为它们相等。代码如下:


bool isEqual(double a, double b, double epsilon) {

  double diff = fabs(a - b);

  double avg = (fabs(a) + fabs(b)) / 2.0;

  return diff / avg <= epsilon;

}

其中,`epsilon`表示指定的相对误差值。

3. 最后一位法:将两个小数的差取绝对值,并将其转换成字符串,比较它们的最后一位是否相等,如果相等,则认为它们相等。代码如下:


bool isEqual(double a, double b) {

  double diff = fabs(a - b);

  char str1[100], str2[100];

  sprintf(str1, "%.16f", a);

  sprintf(str2, "%.16f", b);

  if (strcmp(str1, str2) == 0 ||

    strcmp(str1, str2) == 1 && atof(str1) - atof(str2) < 0.00000001 ||

    strcmp(str1, str2) == -1 && atof(str2) - atof(str1) < 0.00000001)

    return true;

  else

    return false;

}

上述方法均可用于判断两个小数的相等性,具体应根据实际情况选择最合适的方法。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复