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/
由于舍入错误,大多数浮点数最终略微不精确.只要这种不精确度保持很小,通常可以忽略它.但是,它也意味着期望相等的数字(例如,当通过不同的正确方法计算相同的结果时)通常略有不同,并且简单的相等测试失败.
首先:计算布尔值(使用<运算符)然后将其包装在另一个布尔值中是没有意义的。就像这样写:
bool Equality(float a, float b, float epsilon)
{
return fabs(a - b) < epsilon;
}
Run Code Online (Sandbox Code Playgroud)
其次,您的 epsilon 本身可能没有很好地表示为float,因此看起来不像您所期望的那样。尝试使用 2 的负幂,例如 1/1048576。
| 归档时间: |
|
| 查看次数: |
28619 次 |
| 最近记录: |