例如,我使用以下功能:
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()可达的结果。
所以我的问题是:
如何模拟非确定性浮点数? 如何测试某些函数调用的可达性?
答案 0 :(得分:1)
Frama-C是一个插件集合,对无限/ NaN浮点值有不同程度的支持。我相信WP支持NaN和infinites;但这可能取决于您选择的数字模型(选项-wp-model
)。
对于抽象解释插件(EVA,以前称为Value),目前不支持NaN和infinites。分析器假设(并证明)所有浮点值都是有限的。 Frama-C硫磺将增加对非限制性支持。
此外,您的nondet_float
功能在任何情况下都无效。 C标准禁止返回未初始化的值,并且此功能将被标记为不正确,例如: EVA。相反,你应该使用一个没有主体的函数,并以assigns \result \from \nothing
作为规范。