我写了一个简单的函数,想知道正在使用的断言宏。当我在第六个断言函数之后测试函数(moving_hysteresis)时,我得到了一个中止,我找不到原因。 moving_hysteresis()函数如下:
float moving_hysteresis(float Delta,float temp)
{
float delta=Delta;
float temp_min=ZERO;
float temp_max=delta;
float result;
if(temp<=temp_max)
{
if(temp>=temp_min)
{
result=temp;
return result;
}
else
{
result=temp+delta;
return result;
}
}
else
{
result=temp-delta;
return result;
}
}
如果我尝试用
进行测试 assert(moving_hsysteresis(5.00,-5.01)==(float)-0.01);
我得到一个断言,我找不到原因...... 例如,如果我尝试使用
进行测试assert(moving_hsysteresis(5.00,-2.36)==(float)2.64);
它正常工作。有人有什么想法吗?
答案 0 :(得分:1)
如果您编译以下代码:
scan
该值应在数学上为零,但浮点误差意味着结果不会精确为零。在我的系统上打印出 scan(text="1 2 3 4 5 6 7")
。
出于这个原因,测试不平等的浮动通常会检查一个小的elipson而不是测试确切的不等式。
答案 1 :(得分:0)
你的第一个断言是有效的,因为差异对于精度来说太小了(浮点精度有限)。
这就是你的第二个断言有效的原因。