ACSL implementation (Версия 1.11 Выполнение в Алюминии-20160501) перечисляет \NearestEven
как режим округления (стр. 23). Однако, похоже, он пока недоступен во время выполнения. Когда я побежал следующий код:Есть в наличии « NearestEven» в рамка-c Алюминий-20160501?
/*@ requires 0x1p-967 <= C <= 0x1p970;
@ ensures \result == \round_double(\NearestEven, (x+y)/2) ;
@ */
double average(double C, double x, double y) {
if (C <= abs(x))
return x/2+y/2;
else
return (x+y)/2;
}
с помощью следующей команды: frama-c -wp -wp-rte -wp-prover coq avg.c
, я получаю: [wp] user error: Builtin \NearestEven not defined
. Ни один из других режимов округления не был доступен.
Любые предложения?
Спасибо! Поддерживается ли плагин Jessie? Алюминиевая версия frama-c, похоже, не приходит с Джесси, и я пробовал весь путь обратно в Азот и не видел этого. Джесси [веб-страница] (http://krakatoa.lri.fr/) не дает понять, где ее получить. – queeten
Я довольно не уверен в точном статусе. Источники [why3] (http://why3.lri.fr/) показывают каталог 'jessie3' с минималистской поддержкой C. Я предполагаю, что вам нужно ограничить то, что Why3 поддерживает напрямую, то есть простые ссылки и массивы, без любой псевдоним, отсутствие gotos и т. д. Если вас в основном интересует точность с плавающей точкой, этот фрагмент может быть достаточным. Однако jessie3, по-видимому, не установлен соответствующим пакетом opam. Я не проверял, можно ли легко установить его, скомпилировав why3 напрямую. – Virgile