比较两个花车

kat*_*ate 10 c comparison

#include <stdbool.h>

bool Equality(double a, double b, double epsilon)
{
  if (fabs(a-b) < epsilon) return true;
  return false;
}
Run Code Online (Sandbox Code Playgroud)

我试过这种方法比较两个双打,但我总是遇到问题,因为我不知道如何选择epsilon,实际上我想比较小数字(小数点后6位数),如0.000001.我尝试了一些数字,有时候我会得到0.000001 != 0.000001,有时0.000001 == 0.000002 除了与epsilon比较之外还有其他方法吗?

我的目的是比较两个双打(代表我的情况下的时间).表示以毫秒为单位的时间的变量t是double.它增加另一个函数0.000001然后0.000002等每次t改变,我想检查它是否等于double tt类型的另一个变量,如果tt == t,我有一些指令要执行..
谢谢你的救命

Rod*_*ddy 16

看这里:http://floating-point-gui.de/errors/comparison/

由于舍入错误,大多数浮点数最终略微不精确.只要这种不精确度保持很小,通常可以忽略它.但是,它也意味着期望相等的数字(例如,当通过不同的正确方法计算相同的结果时)通常略有不同,并且简单的相等测试失败.

当然,每个计算机科学家应该知道浮点运算


unw*_*ind 3

首先:计算布尔值(使用<运算符)然后将其包装在另一个布尔值中是没有意义的。就像这样写:

bool Equality(float a, float b, float epsilon)
{
  return fabs(a - b) < epsilon;
}
Run Code Online (Sandbox Code Playgroud)

其次,您的 epsilon 本身可能没有很好地表示为float,因此看起来不像您所期望的那样。尝试使用 2 的负幂,例如 1/1048576。