Frama-c,非确定性浮点值

时间:2017-09-17 15:56:34

标签: c frama-c

例如,我使用以下功能:

float nondet_float(){
  float x;
  return x;
}

int main(){
  float x = nondet_float();
  if(isnan(x)){
    some_error();
  }
}

我想知道如何使用frama-c来模拟非确定性浮点数。

我想要的是,变量x被认为是任何可能的浮点值,包括-inf,+ inf和NaN。

如果x是NaN,我想得到some_error()可达的结果。

所以我的问题是:

如何模拟非确定性浮点数? 如何测试某些函数调用的可达性?

1 个答案:

答案 0 :(得分:1)

Frama-C是一个插件集合,对无限/ NaN浮点值有不同程度的支持。我相信WP支持NaN和infinites;但这可能取决于您选择的数字模型(选项-wp-model)。

对于抽象解释插件(EVA,以前称为Value),目前不支持NaN和infinites。分析器假设(并证明)所有浮点值都是有限的。 Frama-C硫磺将增加对非限制性支持。

此外,您的nondet_float功能在任何情况下都无效。 C标准禁止返回未初始化的值,并且此功能将被标记为不正确,例如: EVA。相反,你应该使用一个没有主体的函数,并以assigns \result \from \nothing作为规范。