C中的断言与负浮点数

时间:2017-10-08 15:50:30

标签: c

我写了一个简单的函数,想知道正在使用的断言宏。当我在第六个断言函数之后测试函数(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); 

它正常工作。有人有什么想法吗?

2 个答案:

答案 0 :(得分:1)

如果您编译以下代码:

scan

该值应在数学上为零,但浮点误差意味着结果不会精确为零。在我的系统上打印出 scan(text="1 2 3 4 5 6 7")

出于这个原因,测试不平等的浮动通常会检查一个小的elipson而不是测试确切的不等式。

答案 1 :(得分:0)

你的第一个断言是有效的,因为差异对于精度来说太小了(浮点精度有限)。

这就是你的第二个断言有效的原因。