diff --git a/Makefile b/Makefile
index 4290dd453852e363b88dd566e6c3818d727f290b..768fbbbee1cf4def300cb836047b1fe192c451e2 100644
--- a/Makefile
+++ b/Makefile
@@ -612,6 +612,7 @@ KERNEL_CMO=\
 	src/kernel_services/ast_transformations/filter.cmo                          \
 	src/kernel_services/ast_transformations/inline.cmo              \
 	src/kernel_internals/runtime/dump_config.cmo                    \
+	src/kernel_services/ast_transformations/contract_special_float.cmo   \
 	src/kernel_internals/runtime/special_hooks.cmo                  \
 	src/kernel_internals/runtime/messages.cmo
 
diff --git a/headers/header_spec.txt b/headers/header_spec.txt
index 04a3971297756004bf40464bf6bf81e8f531e7ac..0a01c138627760c0a6a488dc48e6aec1281d5653 100644
--- a/headers/header_spec.txt
+++ b/headers/header_spec.txt
@@ -567,6 +567,8 @@ src/kernel_services/ast_queries/logic_typing.mli: CEA_INRIA_LGPL
 src/kernel_services/ast_queries/logic_utils.ml: CEA_INRIA_LGPL
 src/kernel_services/ast_queries/logic_utils.mli: CEA_INRIA_LGPL
 src/kernel_services/ast_transformations/README.md: .ignore
+src/kernel_services/ast_transformations/contract_special_float.ml: CEA_LGPL
+src/kernel_services/ast_transformations/contract_special_float.mli: CEA_LGPL
 src/kernel_services/ast_transformations/clone.ml: CEA_LGPL
 src/kernel_services/ast_transformations/clone.mli: CEA_LGPL
 src/kernel_services/ast_transformations/filter.ml: CEA_LGPL
diff --git a/share/libc/math.h b/share/libc/math.h
index f8b370fae2ef29472cc6a2f7aac0defa95979607..6924d5cab8983f2d1d60cfc9794e965e0e986a71 100644
--- a/share/libc/math.h
+++ b/share/libc/math.h
@@ -128,118 +128,342 @@ int __fc_fpclassify(double x);
   (sizeof(x) == sizeof(float) ? __fc_fpclassifyf(x) == FP_NORMAL : __fc_fpclassify(x) == FP_NORMAL)
 
 
-/*@ requires in_domain: \is_finite(x) && \abs(x) <= 1;
+/*@
+  assigns errno, \result \from x;
+  behavior normal:
+    assumes in_domain: \is_finite(x) && \abs(x) <= 1;
     assigns \result \from x;
     ensures positive_result: \is_finite(\result) && \result >= 0;
+    ensures no_error: errno == \old(errno);
+  behavior domain_error:
+    assumes out_of_domain: \is_infinite(x) || (\is_finite(x) && \abs(x) > 1);
+    ensures nan_result: \is_NaN(\result);
+    ensures errno_set: errno == EDOM;
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    assigns \result \from x;
+    ensures nan_result: \is_NaN(\result);
+    ensures no_error: errno == \old(errno);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern double acos(double x);
 
-/*@ requires in_domain: \is_finite(x) && \abs(x) <= 1;
+/*@
+  assigns errno, \result \from x;
+  behavior normal:
+    assumes in_domain: \is_finite(x) && \abs(x) <= 1;
     assigns \result \from x;
     ensures positive_result: \is_finite(\result) && \result >= 0;
+    ensures no_error: errno == \old(errno);
+  behavior domain_error:
+    assumes out_of_domain: \is_infinite(x) || (\is_finite(x) && \abs(x) > 1);
+    ensures nan_result: \is_NaN(\result);
+    ensures errno_set: errno == EDOM;
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    assigns \result \from x;
+    ensures nan_result: \is_NaN(\result);
+    ensures no_error: errno == \old(errno);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern float acosf(float x);
 
-/*@ requires in_domain: \is_finite(x) && \abs(x) <= 1;
+/*@
+  assigns errno, \result \from x;
+  behavior normal:
+    assumes in_domain: \is_finite(x) && \abs(x) <= 1;
     assigns \result \from x;
     ensures positive_result: \is_finite(\result) && \result >= 0;
+    ensures no_error: errno == \old(errno);
+  behavior domain_error:
+    assumes out_of_domain: \is_infinite(x) || (\is_finite(x) && \abs(x) > 1);
+    ensures nan_result: \is_NaN(\result);
+    ensures errno_set: errno == EDOM;
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    assigns \result \from x;
+    ensures nan_result: \is_NaN(\result);
+    ensures no_error: errno == \old(errno);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern long double acosl(long double x);
 
-/*@ requires in_domain: \is_finite(x) && \abs(x) <= 1;
+/*@
+  assigns errno, \result \from x;
+  behavior normal:
+    assumes in_domain: \is_finite(x) && \abs(x) <= 1;
     assigns \result \from x;
     ensures finite_result: \is_finite(\result);
+    ensures no_error: errno == \old(errno);
+  behavior domain_error:
+    assumes out_of_domain: \is_infinite(x) || (\is_finite(x) && \abs(x) > 1);
+    ensures nan_result: \is_NaN(\result);
+    ensures errno_set: errno == EDOM;
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    assigns \result \from x;
+    ensures nan_result: \is_NaN(\result);
+    ensures no_error: errno == \old(errno);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern double asin(double x);
 
-/*@ requires in_domain: \is_finite(x) && \abs(x) <= 1;
+/*@
+  assigns errno, \result \from x;
+  behavior normal:
+    assumes in_domain: \is_finite(x) && \abs(x) <= 1;
     assigns \result \from x;
     ensures finite_result: \is_finite(\result);
+    ensures no_error: errno == \old(errno);
+  behavior domain_error:
+    assumes out_of_domain: \is_infinite(x) || (\is_finite(x) && \abs(x) > 1);
+    ensures nan_result: \is_NaN(\result);
+    ensures errno_set: errno == EDOM;
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    assigns \result \from x;
+    ensures nan_result: \is_NaN(\result);
+    ensures no_error: errno == \old(errno);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern float asinf(float x);
 
-/*@ requires in_domain: \is_finite(x) && \abs(x) <= 1;
+/*@
+  assigns errno, \result \from x;
+  behavior normal:
+    assumes in_domain: \is_finite(x) && \abs(x) <= 1;
     assigns \result \from x;
     ensures finite_result: \is_finite(\result);
+    ensures no_error: errno == \old(errno);
+  behavior domain_error:
+    assumes out_of_domain: \is_infinite(x) || (\is_finite(x) && \abs(x) > 1);
+    ensures nan_result: \is_NaN(\result);
+    ensures errno_set: errno == EDOM;
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    assigns \result \from x;
+    ensures nan_result: \is_NaN(\result);
+    ensures no_error: errno == \old(errno);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern long double asinl(long double x);
 
-/*@ requires finite_arg: \is_finite(x);
-    assigns \result \from x;
+/*@
+  assigns \result \from x;
+  behavior normal:
+    assumes finite_arg: !\is_NaN(x);
     ensures finite_result: \is_finite(\result);
     ensures result_domain: -1.571 <= \result <= 1.571;
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    ensures nan_result: \is_NaN(\result);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern float atanf(float x);
 
-/*@ requires finite_arg: \is_finite(x);
-    assigns \result \from x;
+/*@
+  assigns \result \from x;
+  behavior normal:
+    assumes number_arg: !\is_NaN(x);
     ensures finite_result: \is_finite(\result);
     ensures result_domain: -1.571 <= \result <= 1.571;
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    ensures nan_result: \is_NaN(\result);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern double atan(double x);
 
-/*@ requires finite_arg: \is_finite(x);
-    assigns \result \from x;
+/*@
+  assigns \result \from x;
+  behavior normal:
+    assumes number_arg: !\is_NaN(x);
     ensures finite_result: \is_finite(\result);
     ensures result_domain: -1.571 <= \result <= 1.571;
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    ensures nan_result: \is_NaN(\result);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern long double atanl(long double x);
 
-/*@ requires finite_args: \is_finite(x) && \is_finite(y);
-    requires finite_result: \is_finite(atan2(x, y));
-    assigns \result \from x, y;
+/*@
+  assigns \result \from x, y;
+  behavior normal:
+    assumes number_args: !\is_NaN(x) && !\is_NaN(y);
     ensures finite_result: \is_finite(\result);
+  behavior nan:
+    assumes nan_arg: \is_NaN(x) || \is_NaN(y);
+    ensures nan_result: \is_NaN(\result);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern double atan2(double y, double x);
 
-/*@ requires finite_args: \is_finite(x) && \is_finite(y);
-    requires finite_logic_result: \is_finite(atan2f(x, y));
-    assigns \result \from x, y;
+/*@
+  assigns \result \from x, y;
+  behavior normal:
+    assumes number_args: !\is_NaN(x) && !\is_NaN(y);
     ensures finite_result: \is_finite(\result);
+  behavior nan:
+    assumes nan_arg: \is_NaN(x) || \is_NaN(y);
+    ensures nan_result: \is_NaN(\result);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern float atan2f(float y, float x);
 
+/*@
+  assigns \result \from x, y;
+  behavior normal:
+    assumes number_args: !\is_NaN(x) && !\is_NaN(y);
+    ensures finite_result: \is_finite(\result);
+  behavior nan:
+    assumes nan_arg: \is_NaN(x) || \is_NaN(y);
+    ensures nan_result: \is_NaN(\result);
+  complete behaviors;
+  disjoint behaviors;
+*/
 extern long double atan2l(long double y, long double x);
 
-/*@ requires finite_arg: \is_finite(x);
+/*@
+  assigns errno, \result \from x;
+  behavior normal:
+    assumes finite_arg: \is_finite(x);
     assigns \result \from x;
     ensures finite_result: \is_finite(\result);
     ensures result_domain: -1. <= \result <= 1.;
+    ensures no_error: errno == \old(errno);
+  behavior infinity:
+    assumes infinite_arg: \is_infinite(x);
+    ensures nan_result: \is_NaN(\result);
+    ensures errno_set: errno == EDOM;
+  behavior nan:
+    assumes nan_arg: !\is_NaN(x);
+    assigns \result \from x;
+    ensures nan_result: \is_NaN(\result);
+    ensures no_error: errno == \old(errno);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern double cos(double x);
 
-/*@ requires finite_arg: \is_finite(x);
+/*@
+  assigns errno, \result \from x;
+  behavior normal:
+    assumes finite_arg: \is_finite(x);
     assigns \result \from x;
     ensures finite_result: \is_finite(\result);
     ensures result_domain: -1. <= \result <= 1.;
+    ensures no_error: errno == \old(errno);
+  behavior infinity:
+    assumes infinite_arg: \is_infinite(x);
+    ensures nan_result: \is_NaN(\result);
+    ensures errno_set: errno == EDOM;
+  behavior nan:
+    assumes nan_arg: !\is_NaN(x);
+    assigns \result \from x;
+    ensures nan_result: \is_NaN(\result);
+    ensures no_error: errno == \old(errno);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern float cosf(float x);
 
-/*@ requires finite_arg: \is_finite(x);
+/*@
+  assigns errno, \result \from x;
+  behavior normal:
+    assumes finite_arg: \is_finite(x);
     assigns \result \from x;
     ensures finite_result: \is_finite(\result);
     ensures result_domain: -1. <= \result <= 1.;
+    ensures no_error: errno == \old(errno);
+  behavior infinity:
+    assumes infinite_arg: \is_infinite(x);
+    ensures nan_result: \is_NaN(\result);
+    ensures errno_set: errno == EDOM;
+  behavior nan:
+    assumes nan_arg: !\is_NaN(x);
+    assigns \result \from x;
+    ensures nan_result: \is_NaN(\result);
+    ensures no_error: errno == \old(errno);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern long double cosl(long double x);
 
-/*@ requires finite_arg: \is_finite(x);
+/*@
+  assigns errno, \result \from x;
+  behavior normal:
+    assumes finite_arg: \is_finite(x);
     assigns \result \from x;
     ensures finite_result: \is_finite(\result);
     ensures result_domain: -1. <= \result <= 1.;
+    ensures no_error: errno == \old(errno);
+  behavior infinity:
+    assumes infinite_arg: \is_infinite(x);
+    ensures nan_result: \is_NaN(\result);
+    ensures errno_set: errno == EDOM;
+  behavior nan:
+    assumes nan_arg: !\is_NaN(x);
+    assigns \result \from x;
+    ensures nan_result: \is_NaN(\result);
+    ensures no_error: errno == \old(errno);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern double sin(double x);
 
-/*@ requires finite_arg: \is_finite(x);
+/*@
+  assigns errno, \result \from x;
+  behavior normal:
+    assumes finite_arg: \is_finite(x);
     assigns \result \from x;
     ensures finite_result: \is_finite(\result);
     ensures result_domain: -1. <= \result <= 1.;
+    ensures no_error: errno == \old(errno);
+  behavior infinity:
+    assumes infinite_arg: \is_infinite(x);
+    ensures nan_result: \is_NaN(\result);
+    ensures errno_set: errno == EDOM;
+  behavior nan:
+    assumes nan_arg: !\is_NaN(x);
+    assigns \result \from x;
+    ensures nan_result: \is_NaN(\result);
+    ensures no_error: errno == \old(errno);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern float sinf(float x);
 
-/*@ requires finite_arg: \is_finite(x);
+/*@
+  assigns errno, \result \from x;
+  behavior normal:
+    assumes finite_arg: \is_finite(x);
     assigns \result \from x;
     ensures finite_result: \is_finite(\result);
     ensures result_domain: -1. <= \result <= 1.;
+    ensures no_error: errno == \old(errno);
+  behavior infinity:
+    assumes infinite_arg: \is_infinite(x);
+    ensures nan_result: \is_NaN(\result);
+    ensures errno_set: errno == EDOM;
+  behavior nan:
+    assumes nan_arg: !\is_NaN(x);
+    assigns \result \from x;
+    ensures nan_result: \is_NaN(\result);
+    ensures no_error: errno == \old(errno);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern long double sinl(long double x);
 
@@ -248,55 +472,79 @@ extern float tanf(float x);
 extern long double tanl(long double x);
 
 /*@
-  assigns __fc_errno, \result \from x;
+  assigns errno, \result \from x;
   behavior normal:
     assumes in_domain: \is_finite(x) && x >= 1;
     assigns \result \from x;
     ensures positive_result: \is_finite(\result) && \result >= 0;
+    ensures no_error: errno == \old(errno);
   behavior infinite:
     assumes is_plus_infinity: \is_plus_infinity(x);
     assigns \result \from x;
     ensures result_plus_infinity: \is_plus_infinity(\result);
+    ensures no_error: errno == \old(errno);
   behavior domain_error:
     assumes out_of_domain: \is_minus_infinity(x) || (\is_finite(x) && x < 1);
-    assigns __fc_errno, \result \from x;
-    ensures errno_set: __fc_errno == 1;
+    ensures nan_result: \is_NaN(\result);
+    ensures errno_set: errno == EDOM;
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    assigns \result \from x;
+    ensures nan_result: \is_NaN(\result);
+    ensures no_error: errno == \old(errno);
+  complete behaviors;
   disjoint behaviors;
  */
 extern double acosh(double x);
 
 /*@
-  assigns __fc_errno, \result \from x;
+  assigns errno, \result \from x;
   behavior normal:
     assumes in_domain: \is_finite(x) && x >= 1;
     assigns \result \from x;
     ensures positive_result: \is_finite(\result) && \result >= 0;
+    ensures no_error: errno == \old(errno);
   behavior infinite:
     assumes is_plus_infinity: \is_plus_infinity(x);
     assigns \result \from x;
     ensures result_plus_infinity: \is_plus_infinity(\result);
+    ensures no_error: errno == \old(errno);
   behavior domain_error:
     assumes out_of_domain: \is_minus_infinity(x) || (\is_finite(x) && x < 1);
-    assigns __fc_errno, \result \from x;
-    ensures errno_set: __fc_errno == 1;
+    ensures nan_result: \is_NaN(\result);
+    ensures errno_set: errno == EDOM;
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    assigns \result \from x;
+    ensures nan_result: \is_NaN(\result);
+    ensures no_error: errno == \old(errno);
+  complete behaviors;
   disjoint behaviors;
  */
 extern float acoshf(float x);
 
 /*@
-  assigns __fc_errno, \result \from x;
+  assigns errno, \result \from x;
   behavior normal:
     assumes in_domain: \is_finite(x) && x >= 1;
     assigns \result \from x;
     ensures positive_result: \is_finite(\result) && \result >= 0;
+    ensures no_error: errno == \old(errno);
   behavior infinite:
     assumes is_plus_infinity: \is_plus_infinity(x);
     assigns \result \from x;
     ensures result_plus_infinity: \is_plus_infinity(\result);
+    ensures no_error: errno == \old(errno);
   behavior domain_error:
     assumes out_of_domain: \is_minus_infinity(x) || (\is_finite(x) && x < 1);
-    assigns __fc_errno, \result \from x;
-    ensures errno_set: __fc_errno == 1;
+    ensures nan_result: \is_NaN(\result);
+    ensures errno_set: errno == EDOM;
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    assigns \result \from x;
+    ensures nan_result: \is_NaN(\result);
+    ensures no_error: errno == \old(errno);
+  complete behaviors;
   disjoint behaviors;
  */
 extern long double acoshl(long double x);
@@ -321,19 +569,77 @@ extern double tanh(double x);
 extern float tanhf(float x);
 extern long double tanhl(long double x);
 
-/*@ requires finite_arg: \is_finite(x);
-    requires finite_domain: x <= 0x1.62e42fefa39efp+9;
+/*@
+  assigns errno, \result \from x;
+  behavior normal:
+    assumes finite_arg: \is_finite(x);
+    assumes domain_arg: x >= -0x1.74910d52d3051p9 && x <= 0x1.62e42fefa39efp+9;
     assigns \result \from x;
     ensures res_finite: \is_finite(\result);
     ensures positive_result: \result > 0.;
+    ensures no_error: errno == \old(errno);
+  behavior overflow:
+    assumes overflow_arg: \is_finite(x) && x > 0x1.62e42fefa39efp+9;
+    ensures infinite_res: \is_plus_infinity(\result);
+    ensures errno_set: errno == ERANGE;
+  behavior plus_infinity:
+    assumes plus_infinity_arg: \is_plus_infinity(x);
+    assigns \result \from x;
+    ensures infinity_result: \is_plus_infinity(\result);
+    ensures no_error: errno == \old(errno);
+  behavior underflow:
+    assumes underflow_arg: \is_finite(x) && x < -0x1.74910d52d3051p9;
+    ensures zero_res: \result == 0.;
+    ensures errno_set: errno == ERANGE;
+  behavior minus_infinity:
+    assumes plus_infinity_arg: \is_minus_infinity(x);
+    assigns \result \from x;
+    ensures zero_result: \is_finite(\result) && \result == 0.;
+    ensures no_error: errno == \old(errno);
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    assigns \result \from x;
+    ensures nan_result: \is_NaN(\result);
+    ensures no_error: errno == \old(errno);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern double exp(double x);
 
-/*@ requires finite_arg: \is_finite(x);
-    requires res_finite: x <= 0x1.62e42ep+6;
+/*@
+  assigns errno, \result \from x;
+  behavior normal:
+    assumes finite_arg: \is_finite(x);
+    assumes domain_arg: x >= -0x1.9fe368p6 && x <= 0x1.62e42ep+6;
     assigns \result \from x;
     ensures res_finite: \is_finite(\result);
     ensures positive_result: \result > 0.;
+    ensures no_error: errno == \old(errno);
+  behavior overflow:
+    assumes overflow_arg: \is_finite(x) && x > 0x1.62e42ep+6;
+    ensures infinite_res: \is_plus_infinity(\result);
+    ensures errno_set: errno == ERANGE;
+  behavior plus_infinity:
+    assumes plus_infinity_arg: \is_plus_infinity(x);
+    assigns \result \from x;
+    ensures infinity_result: \is_plus_infinity(\result);
+    ensures no_error: errno == \old(errno);
+  behavior underflow:
+    assumes underflow_arg: \is_finite(x) && x < -0x1.9fe368p6;
+    ensures zero_res: \result == 0.;
+    ensures errno_set: errno == ERANGE;
+  behavior minus_infinity:
+    assumes plus_infinity_arg: \is_minus_infinity(x);
+    assigns \result \from x;
+    ensures zero_result: \is_finite(\result) && \result == 0.;
+    ensures no_error: errno == \old(errno);
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    assigns \result \from x;
+    ensures nan_result: \is_NaN(\result);
+    ensures no_error: errno == \old(errno);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern float expf(float x);
 
@@ -359,45 +665,189 @@ extern double ldexp(double x, int exp);
 extern float ldexpf(float x, int exp);
 extern long double ldexpl(long double x, int exp);
 
-/*@ requires finite_arg: \is_finite(x);
-    requires arg_positive: x > 0;
+/*@
+  assigns errno, \result \from x;
+  behavior normal:
+    assumes finite_arg: \is_finite(x);
+    assumes arg_positive: x > 0;
     assigns \result \from x;
     ensures finite_result: \is_finite(\result);
+    ensures no_error: errno == \old(errno);
+  behavior infinite:
+    assumes infinite_arg: \is_plus_infinity(x);
+    assigns \result \from x;
+    ensures infinite_result: \is_plus_infinity(\result);
+    ensures no_error: errno == \old(errno);
+  behavior zero:
+    assumes zero_arg: \is_finite(x) && x == 0.;
+    ensures infinite_result: \is_minus_infinity(\result); // -HUGE_VAL
+    ensures errno_set: errno == ERANGE;
+  behavior negative:
+    assumes negative_arg: \is_minus_infinity(x) || (\is_finite(x) && x < -0.);
+    ensures nan_result: \is_NaN(\result);
+    ensures errno_set: errno == EDOM;
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    assigns \result \from x;
+    ensures nan_result: \is_NaN(\result);
+    ensures no_error: errno == \old(errno);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern double log(double x);
 
-/*@ requires finite_arg: \is_finite(x);
-    requires arg_positive: x > 0;
+/*@
+  assigns errno, \result \from x;
+  behavior normal:
+    assumes finite_arg: \is_finite(x);
+    assumes arg_positive: x > 0;
     assigns \result \from x;
     ensures finite_result: \is_finite(\result);
+    ensures no_error: errno == \old(errno);
+  behavior infinite:
+    assumes infinite_arg: \is_plus_infinity(x);
+    assigns \result \from x;
+    ensures infinite_result: \is_plus_infinity(\result);
+    ensures no_error: errno == \old(errno);
+  behavior zero:
+    assumes zero_arg: \is_finite(x) && x == 0.;
+    ensures infinite_result: \is_minus_infinity(\result); // -HUGE_VALF
+    ensures errno_set: errno == ERANGE;
+  behavior negative:
+    assumes negative_arg: \is_minus_infinity(x) || (\is_finite(x) && x < -0.);
+    ensures nan_result: \is_NaN(\result);
+    ensures errno_set: errno == EDOM;
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    assigns \result \from x;
+    ensures nan_result: \is_NaN(\result);
+    ensures no_error: errno == \old(errno);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern float logf(float x);
 
-/*@ requires finite_arg: \is_finite(x);
-    requires arg_pos: x > 0;
+/*@
+  assigns errno, \result \from x;
+  behavior normal:
+    assumes finite_arg: \is_finite(x);
+    assumes arg_positive: x > 0;
     assigns \result \from x;
     ensures finite_result: \is_finite(\result);
+    ensures no_error: errno == \old(errno);
+  behavior infinite:
+    assumes infinite_arg: \is_plus_infinity(x);
+    assigns \result \from x;
+    ensures infinite_result: \is_plus_infinity(\result);
+    ensures no_error: errno == \old(errno);
+  behavior zero:
+    assumes zero_arg: \is_finite(x) && x == 0.;
+    ensures infinite_result: \is_minus_infinity(\result); // -HUGE_VALL
+    ensures errno_set: errno == ERANGE;
+  behavior negative:
+    assumes negative_arg: \is_minus_infinity(x) || (\is_finite(x) && x < -0.);
+    ensures nan_result: \is_NaN(\result);
+    ensures errno_set: errno == EDOM;
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    assigns \result \from x;
+    ensures nan_result: \is_NaN(\result);
+    ensures no_error: errno == \old(errno);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern long double logl(long double x);
 
-/*@ requires finite_arg: \is_finite(x);
-    requires arg_positive: x > 0;
+/*@
+  assigns errno, \result \from x;
+  behavior normal:
+    assumes finite_arg: \is_finite(x);
+    assumes arg_positive: x > 0;
     assigns \result \from x;
     ensures finite_result: \is_finite(\result);
+    ensures no_error: errno == \old(errno);
+  behavior infinite:
+    assumes infinite_arg: \is_plus_infinity(x);
+    assigns \result \from x;
+    ensures infinite_result: \is_plus_infinity(\result);
+    ensures no_error: errno == \old(errno);
+  behavior zero:
+    assumes zero_arg: \is_finite(x) && x == 0.;
+    ensures infinite_result: \is_minus_infinity(\result); // -HUGE_VAL
+    ensures errno_set: errno == ERANGE;
+  behavior negative:
+    assumes negative_arg: \is_minus_infinity(x) || (\is_finite(x) && x < -0.);
+    ensures nan_result: \is_NaN(\result);
+    ensures errno_set: errno == EDOM;
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    assigns \result \from x;
+    ensures nan_result: \is_NaN(\result);
+    ensures no_error: errno == \old(errno);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern double log10(double x);
 
-/*@ requires finite_arg: \is_finite(x);
-    requires arg_positive: x > 0;
+/*@
+  assigns errno, \result \from x;
+  behavior normal:
+    assumes finite_arg: \is_finite(x);
+    assumes arg_positive: x > 0;
     assigns \result \from x;
     ensures finite_result: \is_finite(\result);
+    ensures no_error: errno == \old(errno);
+  behavior infinite:
+    assumes infinite_arg: \is_plus_infinity(x);
+    assigns \result \from x;
+    ensures infinite_result: \is_plus_infinity(\result);
+    ensures no_error: errno == \old(errno);
+  behavior zero:
+    assumes zero_arg: \is_finite(x) && x == 0.;
+    ensures infinite_result: \is_minus_infinity(\result); // -HUGE_VALF
+    ensures errno_set: errno == ERANGE;
+  behavior negative:
+    assumes negative_arg: \is_minus_infinity(x) || (\is_finite(x) && x < -0.);
+    ensures nan_result: \is_NaN(\result);
+    ensures errno_set: errno == EDOM;
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    assigns \result \from x;
+    ensures nan_result: \is_NaN(\result);
+    ensures no_error: errno == \old(errno);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern float log10f(float x);
 
-/*@ requires finite_arg: \is_finite(x);
-    requires arg_postive: x > 0;
+/*@
+  assigns errno, \result \from x;
+  behavior normal:
+    assumes finite_arg: \is_finite(x);
+    assumes arg_positive: x > 0;
     assigns \result \from x;
     ensures finite_result: \is_finite(\result);
+    ensures no_error: errno == \old(errno);
+  behavior infinite:
+    assumes infinite_arg: \is_plus_infinity(x);
+    assigns \result \from x;
+    ensures infinite_result: \is_plus_infinity(\result);
+    ensures no_error: errno == \old(errno);
+  behavior zero:
+    assumes zero_arg: \is_finite(x) && x == 0.;
+    ensures infinite_result: \is_minus_infinity(\result); // -HUGE_VALL
+    ensures errno_set: errno == ERANGE;
+  behavior negative:
+    assumes negative_arg: \is_minus_infinity(x) || (\is_finite(x) && x < -0.);
+    ensures nan_result: \is_NaN(\result);
+    ensures errno_set: errno == EDOM;
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    assigns \result \from x;
+    ensures nan_result: \is_NaN(\result);
+    ensures no_error: errno == \old(errno);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern long double log10l(long double x);
 
@@ -405,24 +855,96 @@ extern double log1p(double x);
 extern float log1pf(float x);
 extern long double log1pl(long double x);
 
-/*@ requires finite_arg: \is_finite(x);
-    requires arg_positive: x > 0;
+/*@
+  assigns errno, \result \from x;
+  behavior normal:
+    assumes finite_arg: \is_finite(x);
+    assumes arg_positive: x > 0;
     assigns \result \from x;
     ensures finite_result: \is_finite(\result);
+    ensures no_error: errno == \old(errno);
+  behavior infinite:
+    assumes infinite_arg: \is_plus_infinity(x);
+    assigns \result \from x;
+    ensures infinite_result: \is_plus_infinity(\result);
+    ensures no_error: errno == \old(errno);
+  behavior zero:
+    assumes zero_arg: \is_finite(x) && x == 0.;
+    ensures infinite_result: \is_minus_infinity(\result); // -HUGE_VAL
+    ensures errno_set: errno == ERANGE;
+  behavior negative:
+    assumes negative_arg: \is_minus_infinity(x) || (\is_finite(x) && x < -0.);
+    ensures nan_result: \is_NaN(\result);
+    ensures errno_set: errno == EDOM;
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    assigns \result \from x;
+    ensures nan_result: \is_NaN(\result);
+    ensures no_error: errno == \old(errno);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern double log2(double x);
 
-/*@ requires finite_arg: \is_finite(x);
-    requires arg_positive: x > 0;
+/*@
+  assigns errno, \result \from x;
+  behavior normal:
+    assumes finite_arg: \is_finite(x);
+    assumes arg_positive: x > 0;
     assigns \result \from x;
     ensures finite_result: \is_finite(\result);
+    ensures no_error: errno == \old(errno);
+  behavior infinite:
+    assumes infinite_arg: \is_plus_infinity(x);
+    assigns \result \from x;
+    ensures infinite_result: \is_plus_infinity(\result);
+    ensures no_error: errno == \old(errno);
+  behavior zero:
+    assumes zero_arg: \is_finite(x) && x == 0.;
+    ensures infinite_result: \is_minus_infinity(\result); // -HUGE_VALF
+    ensures errno_set: errno == ERANGE;
+  behavior negative:
+    assumes negative_arg: \is_minus_infinity(x) || (\is_finite(x) && x < -0.);
+    ensures nan_result: \is_NaN(\result);
+    ensures errno_set: errno == EDOM;
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    assigns \result \from x;
+    ensures nan_result: \is_NaN(\result);
+    ensures no_error: errno == \old(errno);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern float log2f(float x);
 
-/*@ requires finite_arg: \is_finite(x);
-    requires arg_positive: x > 0;
+/*@
+  assigns errno, \result \from x;
+  behavior normal:
+    assumes finite_arg: \is_finite(x);
+    assumes arg_positive: x > 0;
     assigns \result \from x;
     ensures finite_result: \is_finite(\result);
+    ensures no_error: errno == \old(errno);
+  behavior infinite:
+    assumes infinite_arg: \is_plus_infinity(x);
+    assigns \result \from x;
+    ensures infinite_result: \is_plus_infinity(\result);
+    ensures no_error: errno == \old(errno);
+  behavior zero:
+    assumes zero_arg: \is_finite(x) && x == 0.;
+    ensures infinite_result: \is_minus_infinity(\result); // -HUGE_VALL
+    ensures errno_set: errno == ERANGE;
+  behavior negative:
+    assumes negative_arg: \is_minus_infinity(x) || (\is_finite(x) && x < -0.);
+    ensures nan_result: \is_NaN(\result);
+    ensures errno_set: errno == EDOM;
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    assigns \result \from x;
+    ensures nan_result: \is_NaN(\result);
+    ensures no_error: errno == \old(errno);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern long double log2l(long double x);
 
@@ -446,27 +968,57 @@ extern double cbrt(double x);
 extern float cbrtf(float x);
 extern long double cbrtl(long double x);
 
-/*@ requires finite_arg: \is_finite(x);
-    assigns \result \from x;
+/*@
+  assigns \result \from x;
+  behavior normal:
+    assumes finite_arg: \is_finite(x);
     ensures res_finite: \is_finite(\result);
     ensures positive_result: \result >= 0.;
     ensures equal_magnitude_result: \result == x || \result == -x;
+  behavior infinity:
+    assumes infinite_arg: \is_infinite(x);
+    ensures infinite_result: \is_plus_infinity(\result);
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    ensures nan_result: \is_NaN(\result);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern double fabs(double x);
 
-/*@ requires finite_arg: \is_finite(x);
-    assigns \result \from x;
+/*@
+  assigns \result \from x;
+  behavior normal:
+    assumes finite_arg: \is_finite(x);
     ensures res_finite: \is_finite(\result);
     ensures positive_result: \result >= 0.;
     ensures equal_magnitude_result: \result == x || \result == -x;
+  behavior infinity:
+    assumes infinite_arg: \is_infinite(x);
+    ensures infinite_result: \is_plus_infinity(\result);
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    ensures nan_result: \is_NaN(\result);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern float fabsf(float x);
 
-/*@ requires finite_arg: \is_finite(x);
-    assigns \result \from x;
+/*@
+  assigns \result \from x;
+  behavior normal:
+    assumes finite_arg: \is_finite(x);
     ensures res_finite: \is_finite(\result);
     ensures positive_result: \result >= 0.;
     ensures equal_magnitude_result: \result == x || \result == -x;
+  behavior infinity:
+    assumes infinite_arg: \is_infinite(x);
+    ensures infinite_result: \is_plus_infinity(\result);
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    ensures nan_result: \is_NaN(\result);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern long double fabsl(long double x);
 
@@ -474,45 +1026,121 @@ extern double hypot(double x, double y);
 extern float hypotf(float x, float y);
 extern long double hypotl(long double x, long double y);
 
-/*@ requires finite_args: \is_finite(x) && \is_finite(y);
-    requires finite_logic_res: \is_finite(pow(x, y));
-    assigns \result \from x, y;
+/*@
+  assigns errno, \result \from x, y;
+  behavior normal:
+    assumes finite_logic_res: \is_finite(pow(x, y));
     ensures finite_result: \is_finite(\result);
+    ensures errno: errno == ERANGE || errno == \old(errno);
+  behavior overflow:
+    assumes infinite_logic_res: !\is_finite(pow(x, y));
+    ensures infinite_result: !\is_finite(\result);
+    ensures errno: errno == ERANGE || errno == EDOM || errno == \old(errno);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern double pow(double x, double y);
 
-/*@ requires finite_args: \is_finite(x) && \is_finite(y);
-    requires finite_logic_res: \is_finite(powf(x, y));
-    assigns \result \from x, y;
+/*@
+  assigns errno, \result \from x, y;
+  behavior normal:
+    assumes finite_logic_res: \is_finite(pow(x, y));
     ensures finite_result: \is_finite(\result);
+    ensures errno: errno == ERANGE || errno == \old(errno);
+  behavior overflow:
+    assumes infinite_logic_res: !\is_finite(pow(x, y));
+    ensures infinite_result: !\is_finite(\result);
+    ensures errno: errno == ERANGE || errno == EDOM || errno == \old(errno);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern float powf(float x, float y);
 
 extern long double powl(long double x, long double y);
 
-/*@ requires finite_arg: \is_finite(x);
-    requires arg_positive: x >= -0.;
+/*@
+  assigns errno, \result \from x;
+  behavior normal:
+    assumes finite_arg: \is_finite(x);
+    assumes arg_positive: x >= -0.;
     assigns \result \from x;
     ensures finite_result: \is_finite(\result);
     ensures positive_result: \result >= -0.;
     ensures result_value: \result == sqrt(x);
+    ensures no_error: errno == \old(errno);
+  behavior negative:
+    assumes negative_arg: \is_minus_infinity(x) || (\is_finite(x) && x < -0.);
+    ensures nan_result: \is_NaN(\result);
+    ensures errno_set: errno == EDOM;
+  behavior infinity:
+    assumes infinite_arg: \is_plus_infinity(x);
+    assigns \result \from x;
+    ensures infinite_result: \is_plus_infinity(\result);
+    ensures no_error: errno == \old(errno);
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    assigns \result \from x;
+    ensures nan_result: \is_NaN(\result);
+    ensures no_error: errno == \old(errno);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern double sqrt(double x);
 
-/*@ requires finite_arg: \is_finite(x);
-    requires arg_positive: x >= -0.;
+/*@
+  assigns errno, \result \from x;
+  behavior normal:
+    assumes finite_arg: \is_finite(x);
+    assumes arg_positive: x >= -0.;
     assigns \result \from x;
     ensures finite_result: \is_finite(\result);
     ensures positive_result: \result >= -0.;
-    ensures result_value: \result == sqrtf(x);
+    ensures result_value: \result == sqrt(x);
+    ensures no_error: errno == \old(errno);
+  behavior negative:
+    assumes negative_arg: \is_minus_infinity(x) || (\is_finite(x) && x < -0.);
+    ensures nan_result: \is_NaN(\result);
+    ensures errno_set: errno == EDOM;
+  behavior infinity:
+    assumes infinite_arg: \is_plus_infinity(x);
+    assigns \result \from x;
+    ensures infinite_result: \is_plus_infinity(\result);
+    ensures no_error: errno == \old(errno);
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    assigns \result \from x;
+    ensures nan_result: \is_NaN(\result);
+    ensures no_error: errno == \old(errno);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern float sqrtf(float x);
 
-/*@ requires finite_arg: \is_finite(x);
-    requires arg_positive: x >= -0.;
+/*@
+  assigns errno, \result \from x;
+  behavior normal:
+    assumes finite_arg: \is_finite(x);
+    assumes arg_positive: x >= -0.;
     assigns \result \from x;
     ensures finite_result: \is_finite(\result);
     ensures positive_result: \result >= -0.;
+    ensures no_error: errno == \old(errno);
+  behavior negative:
+    assumes negative_arg: \is_minus_infinity(x) || (\is_finite(x) && x < -0.);
+    ensures nan_result: \is_NaN(\result);
+    ensures errno_set: errno == EDOM;
+  behavior infinity:
+    assumes infinite_arg: \is_plus_infinity(x);
+    assigns \result \from x;
+    ensures infinite_result: \is_plus_infinity(\result);
+    ensures no_error: errno == \old(errno);
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    assigns \result \from x;
+    ensures nan_result: \is_NaN(\result);
+    ensures no_error: errno == \old(errno);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern long double sqrtl(long double x);
 
@@ -532,40 +1160,105 @@ extern double tgamma(double x);
 extern float tgammaf(float x);
 extern long double tgammal(long double x);
 
-/*@ requires finite_arg: \is_finite(x);
-    assigns \result \from x;
+/*@
+  assigns \result \from x;
+  behavior finite:
+    assumes finite_arg: \is_finite(x);
     ensures finite_result: \is_finite(\result);
+  behavior infinite:
+    assumes infinite_arg: \is_infinite(x);
+    ensures infinite_result: \is_infinite(\result);
+    ensures equal_result: \result == x;
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    ensures nan_result: \is_NaN(\result);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern double ceil(double x);
 
-/*@ requires finite_arg: \is_finite(x);
-    assigns \result \from x;
+/*@
+  assigns \result \from x;
+  behavior finite:
+    assumes finite_arg: \is_finite(x);
     ensures finite_result: \is_finite(\result);
+  behavior infinite:
+    assumes infinite_arg: \is_infinite(x);
+    ensures infinite_result: \is_infinite(\result);
+    ensures equal_result: \result == x;
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    ensures nan_result: \is_NaN(\result);
+  complete behaviors;
+  disjoint behaviors;
 */
-
 extern float ceilf(float x);
 
-/*@ requires finite_arg: \is_finite(x);
-    assigns \result \from x;
+/*@
+  assigns \result \from x;
+  behavior finite:
+    assumes finite_arg: \is_finite(x);
     ensures finite_result: \is_finite(\result);
+  behavior infinite:
+    assumes infinite_arg: \is_infinite(x);
+    ensures infinite_result: \is_infinite(\result);
+    ensures equal_result: \result == x;
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    ensures nan_result: \is_NaN(\result);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern long double ceill(long double x);
 
-/*@ requires finite_arg: \is_finite(x);
-    assigns \result \from x;
+/*@
+  assigns \result \from x;
+  behavior finite:
+    assumes finite_arg: \is_finite(x);
     ensures finite_result: \is_finite(\result);
+  behavior infinite:
+    assumes infinite_arg: \is_infinite(x);
+    ensures infinite_result: \is_infinite(\result);
+    ensures equal_result: \result == x;
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    ensures nan_result: \is_NaN(\result);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern double floor(double x);
 
-/*@ requires finite_arg: \is_finite(x);
-    assigns \result \from x;
+/*@
+  assigns \result \from x;
+  behavior finite:
+    assumes finite_arg: \is_finite(x);
     ensures finite_result: \is_finite(\result);
+  behavior infinite:
+    assumes infinite_arg: \is_infinite(x);
+    ensures infinite_result: \is_infinite(\result);
+    ensures equal_result: \result == x;
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    ensures nan_result: \is_NaN(\result);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern float floorf(float x);
 
-/*@ requires finite_arg: \is_finite(x);
-    assigns \result \from x;
+/*@
+  assigns \result \from x;
+  behavior finite:
+    assumes finite_arg: \is_finite(x);
     ensures finite_result: \is_finite(\result);
+  behavior infinite:
+    assumes infinite_arg: \is_infinite(x);
+    ensures infinite_result: \is_infinite(\result);
+    ensures equal_result: \result == x;
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    ensures nan_result: \is_NaN(\result);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern long double floorl(long double x);
 
@@ -585,21 +1278,54 @@ extern long long int llrint(double x);
 extern long long int llrintf(float x);
 extern long long int llrintl(long double x);
 
-/*@ requires finite_arg: \is_finite(x);
-    assigns \result \from x;
+/*@
+  assigns \result \from x;
+  behavior finite:
+    assumes finite_arg: \is_finite(x);
     ensures finite_result: \is_finite(\result);
+  behavior infinite:
+    assumes infinite_arg: \is_infinite(x);
+    ensures infinite_result: \is_infinite(\result);
+    ensures equal_result: \result == x;
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    ensures nan_result: \is_NaN(\result);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern double round(double x);
 
-/*@ requires finite_arg: \is_finite(x);
-    assigns \result \from x;
+/*@
+  assigns \result \from x;
+  behavior finite:
+    assumes finite_arg: \is_finite(x);
     ensures finite_result: \is_finite(\result);
+  behavior infinite:
+    assumes infinite_arg: \is_infinite(x);
+    ensures infinite_result: \is_infinite(\result);
+    ensures equal_result: \result == x;
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    ensures nan_result: \is_NaN(\result);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern float roundf(float x);
 
-/*@ requires finite_arg: \is_finite(x);
-    assigns \result \from x;
+/*@
+  assigns \result \from x;
+  behavior finite:
+    assumes finite_arg: \is_finite(x);
     ensures finite_result: \is_finite(\result);
+  behavior infinite:
+    assumes infinite_arg: \is_infinite(x);
+    ensures infinite_result: \is_infinite(\result);
+    ensures equal_result: \result == x;
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    ensures nan_result: \is_NaN(\result);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern long double roundl(long double x);
 
@@ -611,35 +1337,96 @@ extern long long int llround(double x);
 extern long long int llroundf(float x);
 extern long long int llroundl(long double x);
 
-/*@ requires finite_arg: \is_finite(x);
-    assigns \result \from x;
+/*@
+  assigns \result \from x;
+  behavior finite:
+    assumes finite_arg: \is_finite(x);
     ensures finite_result: \is_finite(\result);
+  behavior infinite:
+    assumes infinite_arg: \is_infinite(x);
+    ensures infinite_result: \is_infinite(\result);
+    ensures equal_result: \result == x;
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    ensures nan_result: \is_NaN(\result);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern double trunc(double x);
 
-/*@ requires finite_arg: \is_finite(x);
-    assigns \result \from x;
+/*@
+  assigns \result \from x;
+  behavior finite:
+    assumes finite_arg: \is_finite(x);
     ensures finite_result: \is_finite(\result);
+  behavior infinite:
+    assumes infinite_arg: \is_infinite(x);
+    ensures infinite_result: \is_infinite(\result);
+    ensures equal_result: \result == x;
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    ensures nan_result: \is_NaN(\result);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern float truncf(float x);
 
-/*@ requires finite_arg: \is_finite(x);
-    assigns \result \from x;
+/*@
+  assigns \result \from x;
+  behavior finite:
+    assumes finite_arg: \is_finite(x);
     ensures finite_result: \is_finite(\result);
+  behavior infinite:
+    assumes infinite_arg: \is_infinite(x);
+    ensures infinite_result: \is_infinite(\result);
+    ensures equal_result: \result == x;
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    ensures nan_result: \is_NaN(\result);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern long double truncl(long double x);
 
-/*@ requires finite_args: \is_finite(x) && \is_finite(y);
-    requires finite_logic_result: \is_finite(fmod(x, y));
+/*@
+  assigns errno, \result \from x, y;
+  behavior normal:
+    assumes in_domain: !\is_NaN(x) && !\is_NaN(y) && y != 0.;
     assigns \result \from x, y;
     ensures finite_result: \is_finite(\result);
+    ensures no_error: errno == \old(errno);
+  behavior domain_error:
+    assumes out_of_domain: \is_infinite(x) || y == 0.;
+    ensures nan_result: \is_NaN(\result);
+    ensures errno_set: errno == EDOM;
+  behavior nan:
+    assumes nan_args: \is_NaN(x) || \is_NaN(y);
+    assigns \result \from x, y;
+    ensures nan_result: \is_NaN(\result);
+    ensures no_error: errno == \old(errno);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern double fmod(double x, double y);
 
-/*@ requires finite_args: \is_finite(x) && \is_finite(y);
-    requires finite_logic_result: \is_finite(fmodf(x, y));
+/*@
+  assigns errno, \result \from x, y;
+  behavior normal:
+    assumes in_domain: !\is_NaN(x) && !\is_NaN(y) && y != 0.;
     assigns \result \from x, y;
     ensures finite_result: \is_finite(\result);
+    ensures no_error: errno == \old(errno);
+  behavior domain_error:
+    assumes out_of_domain: \is_infinite(x) || y == 0.;
+    ensures nan_result: \is_NaN(\result);
+    ensures errno_set: errno == EDOM;
+  behavior nan:
+    assumes nan_args: \is_NaN(x) || \is_NaN(y);
+    assigns \result \from x, y;
+    ensures nan_result: \is_NaN(\result);
+    ensures no_error: errno == \old(errno);
+  complete behaviors;
+  disjoint behaviors;
 */
 extern float fmodf(float x, float y);
 
diff --git a/src/kernel_services/ast_transformations/contract_special_float.ml b/src/kernel_services/ast_transformations/contract_special_float.ml
new file mode 100644
index 0000000000000000000000000000000000000000..8eeaed7dcb14e11c4bc98304e1aeb04bf8933693
--- /dev/null
+++ b/src/kernel_services/ast_transformations/contract_special_float.ml
@@ -0,0 +1,138 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2021                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+open Cil_types
+
+let is_special_float_term term =
+  match term.term_node with
+  | TLval (TVar {lv_name = "\\plus_infinity"}, _)
+  | TLval (TVar {lv_name = "\\minus_infinity"}, _) ->
+    Kernel.SpecialFloat.get () = "non-finite"
+  | TLval (TVar {lv_name = "\\NaN"}, _) -> true
+  | _ -> false
+
+let rec is_special_float_pred pred =
+  match pred.pred_content with
+  | Pand (a, b) -> is_special_float_pred a || is_special_float_pred b
+  | Por (a, b)  -> is_special_float_pred a && is_special_float_pred b
+  | Papp (logic_info, [], [_]) ->
+    begin
+      match logic_info.l_var_info.lv_name with
+      | "\\is_NaN" -> true
+      | "\\is_plus_infinity" | "\\is_minus_infinity" | "\\is_infinite" ->
+        Kernel.SpecialFloat.get () = "non-finite"
+      | _ -> false
+    end
+  | Pnot {pred_content = Papp
+              ({l_var_info = {lv_name = "\\is_finite"}}, [], [_])} ->
+    true
+  | Prel (Req, t1, t2) ->
+    (is_special_float_term t1) <> (is_special_float_term t2)
+  | _ -> false
+
+let ensures_special_float = function
+  | Normal, ip -> is_special_float_pred ip.ip_content.tp_statement
+  | _ -> false
+
+let are_complete_disjoint spec behaviors =
+  match spec.spec_complete_behaviors, spec.spec_disjoint_behaviors with
+  | [complete], [disjoint] ->
+    let mem bhv = List.(mem bhv.b_name complete && mem bhv.b_name disjoint) in
+    List.for_all mem behaviors
+  | _ -> false
+
+let find_behavior name spec =
+  let rec find acc = function
+    | [] -> None, spec.spec_behavior
+    | b :: tl -> if b.b_name = name then Some b, acc @ tl else find (b :: acc) tl
+  in
+  find [] spec.spec_behavior
+
+let update_spec spec =
+  let default, behaviors = find_behavior Cil.default_behavior_name spec in
+  let filter bhv = List.exists ensures_special_float bhv.b_post_cond in
+  let disabled, normal = List.partition filter behaviors in
+  if disabled <> [] then
+    match normal with
+    | [ bhv ] when are_complete_disjoint spec behaviors ->
+      let requires = bhv.b_requires @ bhv.b_assumes in
+      let default =
+        match default with
+        | None ->
+          bhv.b_name <- Cil.default_behavior_name;
+          bhv.b_requires <- requires;
+          bhv.b_assumes <- [];
+          bhv
+        | Some default ->
+          default.b_requires <- default.b_requires @ requires;
+          if bhv.b_assigns <> WritesAny
+          then default.b_assigns <- bhv.b_assigns;
+          if bhv.b_allocation <> FreeAllocAny
+          then default.b_allocation <- bhv.b_allocation;
+          default.b_post_cond <- default.b_post_cond @ bhv.b_post_cond;
+          default.b_extended <- default.b_extended @ bhv.b_extended;
+          default
+      in
+      spec.spec_behavior <- [default];
+      spec.spec_complete_behaviors <- [];
+      spec.spec_disjoint_behaviors <- [];
+    | _ ->
+      let requires =
+        List.map
+          (fun bhv ->
+             let neg_assumes =
+               List.map
+                 (fun e -> (Logic_const.pnot (e.ip_content.tp_statement)))
+                 (bhv.b_requires @ bhv.b_assumes)
+             in
+             Logic_const.(new_predicate (pors neg_assumes)))
+          disabled
+      in
+      let default =
+        match default with
+        | None -> Cil.mk_behavior ~requires ()
+        | Some default ->
+          default.b_requires <- default.b_requires @ requires;
+          default
+      in
+      spec.spec_behavior <- default :: normal;
+      let filter name = List.for_all (fun b -> b.b_name <> name) disabled in
+      let map_filter = List.map (List.filter filter) in
+      spec.spec_complete_behaviors <- map_filter spec.spec_complete_behaviors;
+      spec.spec_disjoint_behaviors <- map_filter spec.spec_disjoint_behaviors
+
+let visitor = object
+  inherit Cil.nopCilVisitor
+  method! vspec spec = update_spec spec; Cil.SkipChildren
+end
+
+let run ast =
+  if Kernel.SpecialFloat.get () <> "none" then
+    Cil.visitCilFileSameGlobals visitor ast
+
+let transform =
+  File.register_code_transformation_category "contract_special_float"
+
+let () =
+  File.add_code_transformation_before_cleanup
+    ~deps:[(module Kernel.SpecialFloat)]
+    transform run
diff --git a/src/kernel_services/ast_transformations/contract_special_float.mli b/src/kernel_services/ast_transformations/contract_special_float.mli
new file mode 100644
index 0000000000000000000000000000000000000000..cce51dc83ef23f10bb7ed95d5a93dfc632b91896
--- /dev/null
+++ b/src/kernel_services/ast_transformations/contract_special_float.mli
@@ -0,0 +1,21 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2021                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
diff --git a/src/plugins/report/tests/report/oracle/csv.csv b/src/plugins/report/tests/report/oracle/csv.csv
index 445f2843ae3c712b2b47065c1d72f36a0c2d9ec8..7b609dc39a328eb5284ad2ae82207be1a2b7ec44 100644
--- a/src/plugins/report/tests/report/oracle/csv.csv
+++ b/src/plugins/report/tests/report/oracle/csv.csv
@@ -1,5 +1,5 @@
 directory	file	line	function	property kind	status	property
-FRAMAC_SHARE/libc	math.h	478	pow	precondition	Unknown	finite_logic_res: \is_finite(pow(x, y))
+FRAMAC_SHARE/libc	math.h	1032	pow	precondition	Unknown	finite_logic_res: \is_finite(pow(x, y))
 tests/report	csv.c	11	main1	signed_overflow	Unknown	-2147483648 ≤ x * x
 tests/report	csv.c	11	main1	signed_overflow	Unknown	x * x ≤ 2147483647
 tests/report	csv.c	12	main1	index_bound	Unknown	0 ≤ x
diff --git a/src/plugins/report/tests/report/oracle/csv.res.oracle b/src/plugins/report/tests/report/oracle/csv.res.oracle
index aaf1752f36f4d2a5614f9f35f6bd27d7e986d277..9d56ae932a09b6dedae6578ae8985c22c6dbb1e8 100644
--- a/src/plugins/report/tests/report/oracle/csv.res.oracle
+++ b/src/plugins/report/tests/report/oracle/csv.res.oracle
@@ -31,8 +31,6 @@
 [eva] computing for function main3 <- main.
   Called from tests/report/csv.c:56.
 [eva] tests/report/csv.c:33: Call to builtin pow
-[eva] tests/report/csv.c:33: 
-  function pow: precondition 'finite_args' got status valid.
 [eva] Recording results for main3
 [eva] Done for function main3
 [eva] computing for function main4 <- main.
@@ -62,11 +60,12 @@
 [eva:final-states] Values at end of function main4:
   d ∈ [1. .. 1.79769313486e+308]
 [eva:final-states] Values at end of function main3:
+  __fc_errno ∈ [--..--]
   f1 ∈ [-2147483648. .. 2147483647.]
   f2 ∈ [-2147483648. .. 2147483647.]
   r ∈ [-1.79769313486e+308 .. 1.79769313486e+308]
 [eva:final-states] Values at end of function main:
-  
+  __fc_errno ∈ [--..--]
 [eva:summary] ====== ANALYSIS SUMMARY ======
   ----------------------------------------------------------------------------
   5 functions analyzed (out of 5): 100% coverage.
@@ -84,8 +83,8 @@
   ----------------------------------------------------------------------------
   Evaluation of the logical properties reached by the analysis:
     Assertions        0 valid     0 unknown     0 invalid      0 total
-    Preconditions     2 valid     4 unknown     1 invalid      7 total
-  28% of the logical properties reached have been proven.
+    Preconditions     1 valid     4 unknown     1 invalid      6 total
+  16% of the logical properties reached have been proven.
   ----------------------------------------------------------------------------
 [report] Dumping properties in 'tests/report/result/csv.csv'
 [eva] Analyzing a complete application starting at main
@@ -167,11 +166,12 @@
 [eva:final-states] Values at end of function main4:
   d ∈ [1. .. 1.79769313486e+308]
 [eva:final-states] Values at end of function main3:
+  __fc_errno ∈ [--..--]
   f1 ∈ [-2147483648. .. 2147483647.]
   f2 ∈ [-2147483648. .. 2147483647.]
   r ∈ [-1.79769313486e+308 .. 1.79769313486e+308]
 [eva:final-states] Values at end of function main:
-  
+  __fc_errno ∈ [--..--]
 [eva:summary] ====== ANALYSIS SUMMARY ======
   ----------------------------------------------------------------------------
   5 functions analyzed (out of 5): 100% coverage.
@@ -189,6 +189,6 @@
   ----------------------------------------------------------------------------
   Evaluation of the logical properties reached by the analysis:
     Assertions        0 valid     0 unknown     0 invalid      0 total
-    Preconditions     2 valid     4 unknown     1 invalid      7 total
-  28% of the logical properties reached have been proven.
+    Preconditions     1 valid     4 unknown     1 invalid      6 total
+  16% of the logical properties reached have been proven.
   ----------------------------------------------------------------------------
diff --git a/tests/float/contract_special_float.c b/tests/float/contract_special_float.c
new file mode 100644
index 0000000000000000000000000000000000000000..b3627110e9d0efb478e9e42f6bf861a0f0fc7066
--- /dev/null
+++ b/tests/float/contract_special_float.c
@@ -0,0 +1,99 @@
+/* run.config*
+   OPT: -eva @EVA_CONFIG@ -warn-special-float non-finite
+   OPT: -eva @EVA_CONFIG@ -warn-special-float nan
+   OPT: -eva @EVA_CONFIG@ -warn-special-float none
+*/
+
+/*@
+  assigns \result \from x;
+  behavior normal:
+    assumes domain_arg: \is_plus_infinity(x) || (\is_finite(x) && x >= 1.);
+    ensures finite_result: \is_finite(\result);
+    ensures positive_result: \result >= 0.;
+  behavior negative:
+    assumes negative_arg: \is_minus_infinity(x) || (\is_finite(x) && x < 0.);
+    ensures nan_result: \is_NaN(\result);
+  behavior infinite:
+    assumes small_arg: \is_finite(x) && x >= 0. && x < 1.;
+    ensures infinite_result: \is_plus_infinity(\result);
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    ensures nan_result: \is_NaN(\result);
+  complete behaviors;
+  disjoint behaviors;
+*/
+extern double fun(double x);
+
+/*@
+  behavior normal:
+    assumes domain_arg: \is_plus_infinity(x) || (\is_finite(x) && x >= 1.);
+    assigns \result \from x;
+    ensures finite_result: \is_finite(\result);
+    ensures positive_result: \result >= 0.;
+  behavior negative:
+    assumes negative_arg: \is_minus_infinity(x) || (\is_finite(x) && x < 0.);
+    assigns \result \from x;
+    ensures nan_result: \is_NaN(\result);
+  behavior infinite:
+    assumes small_arg: \is_finite(x) && x >= 0. && x < 1.;
+    assigns \result \from x;
+    ensures infinite_result: \is_plus_infinity(\result);
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    assigns \result \from x;
+    ensures nan_result: \is_NaN(\result);
+  complete behaviors;
+  disjoint behaviors;
+*/
+extern double fun_no_default(double x);
+
+/*@
+  assigns \result \from x;
+  behavior normal:
+    assumes domain_arg: \is_plus_infinity(x) || (\is_finite(x) && x >= 1.);
+    ensures finite_result: \is_finite(\result);
+    ensures positive_result: \result >= 0.;
+  behavior negative:
+    assumes negative_arg: \is_minus_infinity(x) || (\is_finite(x) && x < 0.);
+    ensures nan_result: \is_NaN(\result);
+  behavior infinite:
+    assumes small_arg: \is_finite(x) && x >= 0. && x < 1.;
+    ensures infinite_result: \is_plus_infinity(\result);
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    ensures nan_result: \is_NaN(\result);
+  complete behaviors;
+*/
+extern double fun_no_disjoint(double x);
+
+/*@
+  assigns \result \from x;
+  behavior normal:
+    assumes domain_arg: \is_plus_infinity(x) || (\is_finite(x) && x >= 1.);
+    ensures finite_result: \is_finite(\result);
+    ensures positive_result: \result >= 0.;
+  behavior negative:
+    assumes negative_arg: \is_minus_infinity(x) || (\is_finite(x) && x < 0.);
+    ensures nan_result: \is_NaN(\result);
+  behavior infinite:
+    assumes small_arg: \is_finite(x) && x >= 0. && x < 1.;
+    ensures infinite_result: \is_plus_infinity(\result);
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    ensures nan_result: \is_NaN(\result);
+  disjoint behaviors;
+*/
+extern double fun_no_complete(double x);
+
+volatile double v;
+
+int main(){
+  double a = v;
+  double w = fun(a);
+  double b = v;
+  double x = fun_no_default(b); // no default behavior
+  double c = v;
+  double y = fun_no_disjoint(c); // no disjoint behaviors
+  double d = v;
+  double z = fun_no_complete(d); // no complete behaviors
+}
diff --git a/tests/float/oracle/builtins.res.oracle b/tests/float/oracle/builtins.res.oracle
index 66f30707d3259e2969df47d8e280f469eb3f74b4..e6023b3d1ca5662c47bc5c0b07a77b5eb4feb48e 100644
--- a/tests/float/oracle/builtins.res.oracle
+++ b/tests/float/oracle/builtins.res.oracle
@@ -99,30 +99,46 @@
   function log10: precondition 'arg_positive' got status invalid.
 [eva] tests/float/builtins.c:85: Call to builtin exp
 [eva] tests/float/builtins.c:85: 
-  function exp: precondition 'finite_arg' got status valid.
+  function exp: precondition ¬(overflow_arg:
+                                  \is_finite(x) ∧ x > 0x1.62e42fefa39efp+9) got status valid.
 [eva] tests/float/builtins.c:85: 
-  function exp: precondition 'finite_domain' got status valid.
+  function exp: precondition ¬(plus_infinity_arg: \is_plus_infinity(x)) got status valid.
+[eva] tests/float/builtins.c:85: 
+  function exp: precondition ¬(nan_arg: \is_NaN(x)) got status valid.
 [eva] tests/float/builtins.c:88: Call to builtin exp
 [eva] tests/float/builtins.c:88: 
-  function exp: precondition 'finite_arg' got status valid.
+  function exp: precondition ¬(overflow_arg:
+                                  \is_finite(x) ∧ x > 0x1.62e42fefa39efp+9) got status valid.
+[eva] tests/float/builtins.c:88: 
+  function exp: precondition ¬(plus_infinity_arg: \is_plus_infinity(x)) got status valid.
 [eva] tests/float/builtins.c:88: 
-  function exp: precondition 'finite_domain' got status valid.
+  function exp: precondition ¬(nan_arg: \is_NaN(x)) got status valid.
 [eva] tests/float/builtins.c:91: Call to builtin exp
 [eva] tests/float/builtins.c:91: 
-  function exp: precondition 'finite_arg' got status valid.
+  function exp: precondition ¬(overflow_arg:
+                                  \is_finite(x) ∧ x > 0x1.62e42fefa39efp+9) got status valid.
+[eva] tests/float/builtins.c:91: 
+  function exp: precondition ¬(plus_infinity_arg: \is_plus_infinity(x)) got status valid.
 [eva] tests/float/builtins.c:91: 
-  function exp: precondition 'finite_domain' got status valid.
+  function exp: precondition ¬(nan_arg: \is_NaN(x)) got status valid.
 [eva:alarm] tests/float/builtins.c:94: Warning: assertion got status unknown.
 [eva] tests/float/builtins.c:95: Call to builtin exp
-[eva] tests/float/builtins.c:95: 
-  function exp: precondition 'finite_arg' got status valid.
 [eva:alarm] tests/float/builtins.c:95: Warning: 
-  function exp: precondition 'finite_domain' got status unknown.
+  function exp: precondition ¬(overflow_arg:
+                                  \is_finite(x) ∧ x > 0x1.62e42fefa39efp+9) got status unknown.
+[eva] tests/float/builtins.c:95: 
+  function exp: precondition ¬(plus_infinity_arg: \is_plus_infinity(x)) got status valid.
+[eva] tests/float/builtins.c:95: 
+  function exp: precondition ¬(nan_arg: \is_NaN(x)) got status valid.
 [eva] tests/float/builtins.c:98: Call to builtin exp
-[eva] tests/float/builtins.c:98: 
-  function exp: precondition 'finite_arg' got status valid.
 [eva:alarm] tests/float/builtins.c:98: Warning: 
-  function exp: precondition 'finite_domain' got status invalid.
+  function exp: precondition ¬(overflow_arg:
+                                  \is_finite(x) ∧ x > 0x1.62e42fefa39efp+9) got status invalid.
+[eva] tests/float/builtins.c:98: 
+  function exp: no state left, precondition ¬(plus_infinity_arg:
+                                                 \is_plus_infinity(x)) got status valid.
+[eva] tests/float/builtins.c:98: 
+  function exp: no state left, precondition ¬(nan_arg: \is_NaN(x)) got status valid.
 [eva] tests/float/builtins.c:102: Call to builtin log
 [eva] tests/float/builtins.c:102: 
   function log: precondition 'finite_arg' got status valid.
@@ -131,9 +147,12 @@
 [eva] tests/float/builtins.c:103: assertion got status valid.
 [eva] tests/float/builtins.c:104: Call to builtin exp
 [eva] tests/float/builtins.c:104: 
-  function exp: precondition 'finite_arg' got status valid.
+  function exp: precondition ¬(overflow_arg:
+                                  \is_finite(x) ∧ x > 0x1.62e42fefa39efp+9) got status valid.
+[eva] tests/float/builtins.c:104: 
+  function exp: precondition ¬(plus_infinity_arg: \is_plus_infinity(x)) got status valid.
 [eva] tests/float/builtins.c:104: 
-  function exp: precondition 'finite_domain' got status valid.
+  function exp: precondition ¬(nan_arg: \is_NaN(x)) got status valid.
 [eva:alarm] tests/float/builtins.c:107: Warning: 
   pointer downcast. assert (unsigned int)(&d) ≤ 2147483647;
 [eva:alarm] tests/float/builtins.c:107: Warning: 
@@ -155,6 +174,7 @@
   assertion 'Eva,initialization' got final status invalid.
 [eva] ====== VALUES COMPUTED ======
 [eva:final-states] Values at end of function main_log_exp:
+  __fc_errno ∈ [--..--]
   l1 ∈ {0} or UNINITIALIZED
   l2 ∈ {1.00063188031} or UNINITIALIZED
   l3 ∈ {1.09861228867} or UNINITIALIZED
diff --git a/tests/float/oracle/contract_special_float.0.res.oracle b/tests/float/oracle/contract_special_float.0.res.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..c94819b6e7cfb0a13240953645d175cee9307247
--- /dev/null
+++ b/tests/float/oracle/contract_special_float.0.res.oracle
@@ -0,0 +1,67 @@
+[kernel] Parsing tests/float/contract_special_float.c (with preprocessing)
+[eva] Analyzing a complete application starting at main
+[eva] Computing initial state
+[eva] Initial state computed
+[eva:initial-state] Values of globals at initialization
+  v ∈ [--..--]
+[eva:alarm] tests/float/contract_special_float.c:91: Warning: 
+  non-finite double value. assert \is_finite(v);
+[eva] computing for function fun <- main.
+  Called from tests/float/contract_special_float.c:92.
+[eva] using specification for function fun
+[eva:alarm] tests/float/contract_special_float.c:92: Warning: 
+  function fun: precondition 'domain_arg' got status unknown.
+[eva] Done for function fun
+[eva:alarm] tests/float/contract_special_float.c:93: Warning: 
+  non-finite double value. assert \is_finite(v);
+[eva] computing for function fun_no_default <- main.
+  Called from tests/float/contract_special_float.c:94.
+[eva] using specification for function fun_no_default
+[eva:alarm] tests/float/contract_special_float.c:94: Warning: 
+  function fun_no_default: precondition 'domain_arg' got status unknown.
+[eva] Done for function fun_no_default
+[eva:alarm] tests/float/contract_special_float.c:95: Warning: 
+  non-finite double value. assert \is_finite(v);
+[eva] computing for function fun_no_disjoint <- main.
+  Called from tests/float/contract_special_float.c:96.
+[eva] using specification for function fun_no_disjoint
+[eva:alarm] tests/float/contract_special_float.c:96: Warning: 
+  function fun_no_disjoint: precondition ¬(negative_arg:
+                                              \is_minus_infinity(x) ∨
+                                              (\is_finite(x) ∧ x < 0.)) got status unknown.
+[eva:alarm] tests/float/contract_special_float.c:96: Warning: 
+  function fun_no_disjoint: precondition ¬(small_arg:
+                                              \is_finite(x) ∧ x ≥ 0. ∧
+                                              x < 1.) got status unknown.
+[eva] tests/float/contract_special_float.c:96: 
+  function fun_no_disjoint: precondition ¬(nan_arg: \is_NaN(x)) got status valid.
+[eva] Done for function fun_no_disjoint
+[eva:alarm] tests/float/contract_special_float.c:97: Warning: 
+  non-finite double value. assert \is_finite(v);
+[eva] computing for function fun_no_complete <- main.
+  Called from tests/float/contract_special_float.c:98.
+[eva] using specification for function fun_no_complete
+[eva:alarm] tests/float/contract_special_float.c:98: Warning: 
+  function fun_no_complete: precondition ¬(negative_arg:
+                                              \is_minus_infinity(x) ∨
+                                              (\is_finite(x) ∧ x < 0.)) got status unknown.
+[eva:alarm] tests/float/contract_special_float.c:98: Warning: 
+  function fun_no_complete: precondition ¬(small_arg:
+                                              \is_finite(x) ∧ x ≥ 0. ∧
+                                              x < 1.) got status unknown.
+[eva] tests/float/contract_special_float.c:98: 
+  function fun_no_complete: precondition ¬(nan_arg: \is_NaN(x)) got status valid.
+[eva] Done for function fun_no_complete
+[eva] Recording results for main
+[eva] done for function main
+[eva] ====== VALUES COMPUTED ======
+[eva:final-states] Values at end of function main:
+  a ∈ [1. .. 1.79769313486e+308]
+  w ∈ [-0. .. 1.79769313486e+308]
+  b ∈ [1. .. 1.79769313486e+308]
+  x ∈ [-0. .. 1.79769313486e+308]
+  c ∈ [1. .. 1.79769313486e+308]
+  y ∈ [-0. .. 1.79769313486e+308]
+  d ∈ [1. .. 1.79769313486e+308]
+  z ∈ [-0. .. 1.79769313486e+308]
+  __retres ∈ {0}
diff --git a/tests/float/oracle/contract_special_float.1.res.oracle b/tests/float/oracle/contract_special_float.1.res.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..47a549ed31074554153b6732f79c08a9ebd8063b
--- /dev/null
+++ b/tests/float/oracle/contract_special_float.1.res.oracle
@@ -0,0 +1,69 @@
+[kernel] Parsing tests/float/contract_special_float.c (with preprocessing)
+[eva] Analyzing a complete application starting at main
+[eva] Computing initial state
+[eva] Initial state computed
+[eva:initial-state] Values of globals at initialization
+  v ∈ [--..--]
+[eva:alarm] tests/float/contract_special_float.c:91: Warning: 
+  NaN double value. assert ¬\is_NaN(v);
+[eva] computing for function fun <- main.
+  Called from tests/float/contract_special_float.c:92.
+[eva] using specification for function fun
+[eva:alarm] tests/float/contract_special_float.c:92: Warning: 
+  function fun: precondition ¬(negative_arg:
+                                  \is_minus_infinity(x) ∨
+                                  (\is_finite(x) ∧ x < 0.)) got status unknown.
+[eva] tests/float/contract_special_float.c:92: 
+  function fun: precondition ¬(nan_arg: \is_NaN(x)) got status valid.
+[eva] Done for function fun
+[eva:alarm] tests/float/contract_special_float.c:93: Warning: 
+  NaN double value. assert ¬\is_NaN(v);
+[eva] computing for function fun_no_default <- main.
+  Called from tests/float/contract_special_float.c:94.
+[kernel] tests/float/contract_special_float.c:94: Warning: 
+  No code nor explicit assigns clause for function fun_no_default, generating default assigns from the specification
+[eva] using specification for function fun_no_default
+[eva:alarm] tests/float/contract_special_float.c:94: Warning: 
+  function fun_no_default: precondition ¬(negative_arg:
+                                             \is_minus_infinity(x) ∨
+                                             (\is_finite(x) ∧ x < 0.)) got status unknown.
+[eva] tests/float/contract_special_float.c:94: 
+  function fun_no_default: precondition ¬(nan_arg: \is_NaN(x)) got status valid.
+[eva] Done for function fun_no_default
+[eva:alarm] tests/float/contract_special_float.c:95: Warning: 
+  NaN double value. assert ¬\is_NaN(v);
+[eva] computing for function fun_no_disjoint <- main.
+  Called from tests/float/contract_special_float.c:96.
+[eva] using specification for function fun_no_disjoint
+[eva:alarm] tests/float/contract_special_float.c:96: Warning: 
+  function fun_no_disjoint: precondition ¬(negative_arg:
+                                              \is_minus_infinity(x) ∨
+                                              (\is_finite(x) ∧ x < 0.)) got status unknown.
+[eva] tests/float/contract_special_float.c:96: 
+  function fun_no_disjoint: precondition ¬(nan_arg: \is_NaN(x)) got status valid.
+[eva] Done for function fun_no_disjoint
+[eva:alarm] tests/float/contract_special_float.c:97: Warning: 
+  NaN double value. assert ¬\is_NaN(v);
+[eva] computing for function fun_no_complete <- main.
+  Called from tests/float/contract_special_float.c:98.
+[eva] using specification for function fun_no_complete
+[eva:alarm] tests/float/contract_special_float.c:98: Warning: 
+  function fun_no_complete: precondition ¬(negative_arg:
+                                              \is_minus_infinity(x) ∨
+                                              (\is_finite(x) ∧ x < 0.)) got status unknown.
+[eva] tests/float/contract_special_float.c:98: 
+  function fun_no_complete: precondition ¬(nan_arg: \is_NaN(x)) got status valid.
+[eva] Done for function fun_no_complete
+[eva] Recording results for main
+[eva] done for function main
+[eva] ====== VALUES COMPUTED ======
+[eva:final-states] Values at end of function main:
+  a ∈ [-0. .. inf]
+  w ∈ [-0. .. inf]
+  b ∈ [-0. .. inf]
+  x ∈ [-0. .. inf]
+  c ∈ [-0. .. inf]
+  y ∈ [-0. .. inf]
+  d ∈ [-1.79769313486e+308 .. inf]
+  z ∈ [-inf .. inf] ∪ {NaN}
+  __retres ∈ {0}
diff --git a/tests/float/oracle/contract_special_float.2.res.oracle b/tests/float/oracle/contract_special_float.2.res.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..c2ded998a7dc6580b0897db4a376efd1a2eeae9e
--- /dev/null
+++ b/tests/float/oracle/contract_special_float.2.res.oracle
@@ -0,0 +1,37 @@
+[kernel] Parsing tests/float/contract_special_float.c (with preprocessing)
+[eva] Analyzing a complete application starting at main
+[eva] Computing initial state
+[eva] Initial state computed
+[eva:initial-state] Values of globals at initialization
+  v ∈ [--..--]
+[eva] computing for function fun <- main.
+  Called from tests/float/contract_special_float.c:92.
+[eva] using specification for function fun
+[eva] Done for function fun
+[eva] computing for function fun_no_default <- main.
+  Called from tests/float/contract_special_float.c:94.
+[kernel] tests/float/contract_special_float.c:94: Warning: 
+  No code nor explicit assigns clause for function fun_no_default, generating default assigns from the specification
+[eva] using specification for function fun_no_default
+[eva] Done for function fun_no_default
+[eva] computing for function fun_no_disjoint <- main.
+  Called from tests/float/contract_special_float.c:96.
+[eva] using specification for function fun_no_disjoint
+[eva] Done for function fun_no_disjoint
+[eva] computing for function fun_no_complete <- main.
+  Called from tests/float/contract_special_float.c:98.
+[eva] using specification for function fun_no_complete
+[eva] Done for function fun_no_complete
+[eva] Recording results for main
+[eva] done for function main
+[eva] ====== VALUES COMPUTED ======
+[eva:final-states] Values at end of function main:
+  a ∈ [-inf .. inf] ∪ {NaN}
+  w ∈ [-0. .. inf] ∪ {NaN}
+  b ∈ [-inf .. inf] ∪ {NaN}
+  x ∈ [-0. .. inf] ∪ {NaN}
+  c ∈ [-inf .. inf] ∪ {NaN}
+  y ∈ [-0. .. inf] ∪ {NaN}
+  d ∈ [-inf .. inf] ∪ {NaN}
+  z ∈ [-inf .. inf] ∪ {NaN}
+  __retres ∈ {0}
diff --git a/tests/float/oracle/math_builtins.res.oracle b/tests/float/oracle/math_builtins.res.oracle
index c72c70a0e4c8f3b114abd0704e8097c133d6c236..14723be574dbd03a221bebd1519fe28699bd41f8 100644
--- a/tests/float/oracle/math_builtins.res.oracle
+++ b/tests/float/oracle/math_builtins.res.oracle
@@ -145,23 +145,23 @@
   Called from tests/float/math_builtins.c:730.
 [eva] tests/float/math_builtins.c:87: Call to builtin atan
 [eva] tests/float/math_builtins.c:87: 
-  function atan: precondition 'finite_arg' got status valid.
+  function atan: precondition 'number_arg' got status valid.
 [eva] tests/float/math_builtins.c:88: Call to builtin atan
 [eva:alarm] tests/float/math_builtins.c:88: Warning: 
-  function atan: precondition 'finite_arg' got status unknown.
+  function atan: precondition 'number_arg' got status unknown.
 [eva] tests/float/math_builtins.c:89: Call to builtin atan
 [eva] tests/float/math_builtins.c:89: 
-  function atan: precondition 'finite_arg' got status valid.
+  function atan: precondition 'number_arg' got status valid.
 [eva] tests/float/math_builtins.c:90: Call to builtin atan
 [eva] tests/float/math_builtins.c:90: 
-  function atan: precondition 'finite_arg' got status valid.
+  function atan: precondition 'number_arg' got status valid.
 [eva] computing for function double_interval <- test_atan <- main.
   Called from tests/float/math_builtins.c:91.
 [eva] Recording results for double_interval
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:92: Call to builtin atan
 [eva] tests/float/math_builtins.c:92: 
-  function atan: precondition 'finite_arg' got status valid.
+  function atan: precondition 'number_arg' got status valid.
 [eva] tests/float/math_builtins.c:94: Call to builtin atanf
 [eva] tests/float/math_builtins.c:94: 
   function atanf: precondition 'finite_arg' got status valid.
@@ -175,81 +175,55 @@
 [eva] tests/float/math_builtins.c:99: 
   Call to builtin Frama_C_atan2 for function atan2
 [eva] tests/float/math_builtins.c:99: 
-  function atan2: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:99: 
-  function atan2: precondition 'finite_result' got status valid.
+  function atan2: precondition 'number_args' got status valid.
 [eva] tests/float/math_builtins.c:100: 
   Call to builtin Frama_C_atan2 for function atan2
 [eva] tests/float/math_builtins.c:100: 
-  function atan2: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:100: 
-  function atan2: precondition 'finite_result' got status valid.
+  function atan2: precondition 'number_args' got status valid.
 [eva] tests/float/math_builtins.c:101: 
   Call to builtin Frama_C_atan2 for function atan2
 [eva] tests/float/math_builtins.c:101: 
-  function atan2: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:101: 
-  function atan2: precondition 'finite_result' got status valid.
+  function atan2: precondition 'number_args' got status valid.
 [eva] tests/float/math_builtins.c:102: 
   Call to builtin Frama_C_atan2 for function atan2
 [eva] tests/float/math_builtins.c:102: 
-  function atan2: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:102: 
-  function atan2: precondition 'finite_result' got status valid.
+  function atan2: precondition 'number_args' got status valid.
 [eva] tests/float/math_builtins.c:103: 
   Call to builtin Frama_C_atan2 for function atan2
 [eva] tests/float/math_builtins.c:103: 
-  function atan2: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:103: 
-  function atan2: precondition 'finite_result' got status valid.
+  function atan2: precondition 'number_args' got status valid.
 [eva] tests/float/math_builtins.c:104: 
   Call to builtin Frama_C_atan2 for function atan2
 [eva] tests/float/math_builtins.c:104: 
-  function atan2: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:104: 
-  function atan2: precondition 'finite_result' got status valid.
+  function atan2: precondition 'number_args' got status valid.
 [eva] tests/float/math_builtins.c:105: 
   Call to builtin Frama_C_atan2 for function atan2
 [eva] tests/float/math_builtins.c:105: 
-  function atan2: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:105: 
-  function atan2: precondition 'finite_result' got status valid.
+  function atan2: precondition 'number_args' got status valid.
 [eva] tests/float/math_builtins.c:106: 
   Call to builtin Frama_C_atan2 for function atan2
 [eva] tests/float/math_builtins.c:106: 
-  function atan2: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:106: 
-  function atan2: precondition 'finite_result' got status valid.
+  function atan2: precondition 'number_args' got status valid.
 [eva] tests/float/math_builtins.c:107: 
   Call to builtin Frama_C_atan2 for function atan2
 [eva] tests/float/math_builtins.c:107: 
-  function atan2: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:107: 
-  function atan2: precondition 'finite_result' got status valid.
+  function atan2: precondition 'number_args' got status valid.
 [eva] tests/float/math_builtins.c:108: 
   Call to builtin Frama_C_atan2 for function atan2
 [eva] tests/float/math_builtins.c:108: 
-  function atan2: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:108: 
-  function atan2: precondition 'finite_result' got status valid.
+  function atan2: precondition 'number_args' got status valid.
 [eva] tests/float/math_builtins.c:109: 
   Call to builtin Frama_C_atan2 for function atan2
 [eva] tests/float/math_builtins.c:109: 
-  function atan2: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:109: 
-  function atan2: precondition 'finite_result' got status valid.
+  function atan2: precondition 'number_args' got status valid.
 [eva] tests/float/math_builtins.c:110: 
   Call to builtin Frama_C_atan2 for function atan2
 [eva] tests/float/math_builtins.c:110: 
-  function atan2: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:110: 
-  function atan2: precondition 'finite_result' got status valid.
+  function atan2: precondition 'number_args' got status valid.
 [eva] tests/float/math_builtins.c:111: 
   Call to builtin Frama_C_atan2 for function atan2
 [eva] tests/float/math_builtins.c:111: 
-  function atan2: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:111: 
-  function atan2: precondition 'finite_result' got status valid.
+  function atan2: precondition 'number_args' got status valid.
 [eva] Recording results for test_atan2_det
 [eva] Done for function test_atan2_det
 [eva] computing for function test_atan2 <- main.
@@ -265,9 +239,7 @@
 [eva] tests/float/math_builtins.c:118: 
   Call to builtin Frama_C_atan2 for function atan2
 [eva] tests/float/math_builtins.c:118: 
-  function atan2: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:118: 
-  function atan2: precondition 'finite_result' got status valid.
+  function atan2: precondition 'number_args' got status valid.
 [eva] computing for function double_interval <- test_atan2 <- main.
   Called from tests/float/math_builtins.c:119.
 [eva] Recording results for double_interval
@@ -275,9 +247,7 @@
 [eva] tests/float/math_builtins.c:120: 
   Call to builtin Frama_C_atan2 for function atan2
 [eva] tests/float/math_builtins.c:120: 
-  function atan2: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:120: 
-  function atan2: precondition 'finite_result' got status valid.
+  function atan2: precondition 'number_args' got status valid.
 [eva] computing for function double_interval <- test_atan2 <- main.
   Called from tests/float/math_builtins.c:121.
 [eva] Recording results for double_interval
@@ -285,9 +255,7 @@
 [eva] tests/float/math_builtins.c:122: 
   Call to builtin Frama_C_atan2 for function atan2
 [eva] tests/float/math_builtins.c:122: 
-  function atan2: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:122: 
-  function atan2: precondition 'finite_result' got status valid.
+  function atan2: precondition 'number_args' got status valid.
 [eva] computing for function double_interval <- test_atan2 <- main.
   Called from tests/float/math_builtins.c:123.
 [eva] Recording results for double_interval
@@ -295,9 +263,7 @@
 [eva] tests/float/math_builtins.c:124: 
   Call to builtin Frama_C_atan2 for function atan2
 [eva] tests/float/math_builtins.c:124: 
-  function atan2: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:124: 
-  function atan2: precondition 'finite_result' got status valid.
+  function atan2: precondition 'number_args' got status valid.
 [eva] computing for function double_interval <- test_atan2 <- main.
   Called from tests/float/math_builtins.c:125.
 [eva] Recording results for double_interval
@@ -305,9 +271,7 @@
 [eva] tests/float/math_builtins.c:126: 
   Call to builtin Frama_C_atan2 for function atan2
 [eva] tests/float/math_builtins.c:126: 
-  function atan2: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:126: 
-  function atan2: precondition 'finite_result' got status valid.
+  function atan2: precondition 'number_args' got status valid.
 [eva] computing for function double_interval <- test_atan2 <- main.
   Called from tests/float/math_builtins.c:127.
 [eva] Recording results for double_interval
@@ -319,9 +283,7 @@
 [eva] tests/float/math_builtins.c:129: 
   Call to builtin Frama_C_atan2 for function atan2
 [eva] tests/float/math_builtins.c:129: 
-  function atan2: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:129: 
-  function atan2: precondition 'finite_result' got status valid.
+  function atan2: precondition 'number_args' got status valid.
 [eva] computing for function double_interval <- test_atan2 <- main.
   Called from tests/float/math_builtins.c:130.
 [eva] Recording results for double_interval
@@ -329,9 +291,7 @@
 [eva] tests/float/math_builtins.c:131: 
   Call to builtin Frama_C_atan2 for function atan2
 [eva] tests/float/math_builtins.c:131: 
-  function atan2: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:131: 
-  function atan2: precondition 'finite_result' got status valid.
+  function atan2: precondition 'number_args' got status valid.
 [eva] computing for function double_interval <- test_atan2 <- main.
   Called from tests/float/math_builtins.c:132.
 [eva] Recording results for double_interval
@@ -339,9 +299,7 @@
 [eva] tests/float/math_builtins.c:133: 
   Call to builtin Frama_C_atan2 for function atan2
 [eva] tests/float/math_builtins.c:133: 
-  function atan2: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:133: 
-  function atan2: precondition 'finite_result' got status valid.
+  function atan2: precondition 'number_args' got status valid.
 [eva] computing for function double_interval <- test_atan2 <- main.
   Called from tests/float/math_builtins.c:134.
 [eva] Recording results for double_interval
@@ -349,9 +307,7 @@
 [eva] tests/float/math_builtins.c:135: 
   Call to builtin Frama_C_atan2 for function atan2
 [eva] tests/float/math_builtins.c:135: 
-  function atan2: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:135: 
-  function atan2: precondition 'finite_result' got status valid.
+  function atan2: precondition 'number_args' got status valid.
 [eva] computing for function double_interval <- test_atan2 <- main.
   Called from tests/float/math_builtins.c:136.
 [eva] Recording results for double_interval
@@ -359,83 +315,57 @@
 [eva] tests/float/math_builtins.c:137: 
   Call to builtin Frama_C_atan2 for function atan2
 [eva] tests/float/math_builtins.c:137: 
-  function atan2: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:137: 
-  function atan2: precondition 'finite_result' got status valid.
+  function atan2: precondition 'number_args' got status valid.
 [eva] tests/float/math_builtins.c:138: 
   Call to builtin Frama_C_atan2 for function atan2
 [eva] tests/float/math_builtins.c:138: 
-  function atan2: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:138: 
-  function atan2: precondition 'finite_result' got status valid.
+  function atan2: precondition 'number_args' got status valid.
 [eva] tests/float/math_builtins.c:139: 
   Call to builtin Frama_C_atan2 for function atan2
 [eva] tests/float/math_builtins.c:139: 
-  function atan2: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:139: 
-  function atan2: precondition 'finite_result' got status valid.
+  function atan2: precondition 'number_args' got status valid.
 [eva] tests/float/math_builtins.c:140: 
   Call to builtin Frama_C_atan2 for function atan2
 [eva] tests/float/math_builtins.c:140: 
-  function atan2: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:140: 
-  function atan2: precondition 'finite_result' got status valid.
+  function atan2: precondition 'number_args' got status valid.
 [eva] tests/float/math_builtins.c:141: 
   Call to builtin Frama_C_atan2 for function atan2
 [eva] tests/float/math_builtins.c:141: 
-  function atan2: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:141: 
-  function atan2: precondition 'finite_result' got status valid.
+  function atan2: precondition 'number_args' got status valid.
 [eva] Recording results for test_atan2
 [eva] Done for function test_atan2
 [eva] computing for function test_pow_det <- main.
   Called from tests/float/math_builtins.c:733.
 [eva] tests/float/math_builtins.c:145: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:145: 
-  function pow: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:145: 
   function pow: precondition 'finite_logic_res' got status valid.
 [eva] tests/float/math_builtins.c:146: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:146: 
-  function pow: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:146: 
   function pow: precondition 'finite_logic_res' got status valid.
 [eva] tests/float/math_builtins.c:147: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:147: 
-  function pow: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:147: 
   function pow: precondition 'finite_logic_res' got status valid.
 [eva] tests/float/math_builtins.c:148: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:148: 
-  function pow: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:148: 
   function pow: precondition 'finite_logic_res' got status valid.
 [eva] tests/float/math_builtins.c:149: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:149: 
-  function pow: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:149: 
   function pow: precondition 'finite_logic_res' got status valid.
 [eva] tests/float/math_builtins.c:150: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:150: 
-  function pow: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:150: 
   function pow: precondition 'finite_logic_res' got status valid.
 [eva] tests/float/math_builtins.c:151: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:151: 
-  function pow: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:151: 
   function pow: precondition 'finite_logic_res' got status valid.
 [eva] tests/float/math_builtins.c:152: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:152: 
-  function pow: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:152: 
   function pow: precondition 'finite_logic_res' got status valid.
 [eva] Recording results for test_pow_det
@@ -448,14 +378,10 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:170: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:170: 
-  function pow: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:170: Warning: 
   function pow: precondition 'finite_logic_res' got status invalid.
 [eva] tests/float/math_builtins.c:172: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:172: 
-  function pow: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:172: Warning: 
   function pow: precondition 'finite_logic_res' got status invalid.
 [eva] computing for function double_interval <- test_pow_singleton_exp <- main.
@@ -464,26 +390,18 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:176: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:176: 
-  function pow: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:176: Warning: 
   function pow: precondition 'finite_logic_res' got status unknown.
 [eva] tests/float/math_builtins.c:177: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:177: 
-  function pow: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:177: Warning: 
   function pow: precondition 'finite_logic_res' got status unknown.
 [eva] tests/float/math_builtins.c:180: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:180: 
-  function pow: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:180: Warning: 
   function pow: precondition 'finite_logic_res' got status unknown.
 [eva] tests/float/math_builtins.c:181: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:181: 
-  function pow: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:181: Warning: 
   function pow: precondition 'finite_logic_res' got status unknown.
 [eva] computing for function double_interval <- test_pow_singleton_exp <- main.
@@ -492,8 +410,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:185: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:185: 
-  function pow: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:185: Warning: 
   function pow: precondition 'finite_logic_res' got status unknown.
 [eva] computing for function double_interval <- test_pow_singleton_exp <- main.
@@ -502,8 +418,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:187: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:187: 
-  function pow: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:187: Warning: 
   function pow: precondition 'finite_logic_res' got status unknown.
 [eva] computing for function double_interval <- test_pow_singleton_exp <- main.
@@ -512,8 +426,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:191: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:191: 
-  function pow: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:191: 
   function pow: precondition 'finite_logic_res' got status valid.
 [eva] tests/float/math_builtins.c:192: 
@@ -524,8 +436,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:194: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:194: 
-  function pow: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:194: 
   function pow: precondition 'finite_logic_res' got status valid.
 [eva] tests/float/math_builtins.c:195: 
@@ -533,14 +443,10 @@
   [0.2500000000000000*2^-1022 .. 1.2707064924076672*2^-330]
 [eva] tests/float/math_builtins.c:199: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:199: 
-  function pow: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:199: 
   function pow: precondition 'finite_logic_res' got status valid.
 [eva] tests/float/math_builtins.c:200: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:200: 
-  function pow: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:200: 
   function pow: precondition 'finite_logic_res' got status valid.
 [eva] computing for function double_interval <- test_pow_singleton_exp <- main.
@@ -549,32 +455,22 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:203: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:203: 
-  function pow: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:203: 
   function pow: precondition 'finite_logic_res' got status valid.
 [eva] tests/float/math_builtins.c:204: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:204: 
-  function pow: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:204: 
   function pow: precondition 'finite_logic_res' got status valid.
 [eva] tests/float/math_builtins.c:205: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:205: 
-  function pow: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:205: 
   function pow: precondition 'finite_logic_res' got status valid.
 [eva] tests/float/math_builtins.c:206: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:206: 
-  function pow: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:206: 
   function pow: precondition 'finite_logic_res' got status valid.
 [eva] tests/float/math_builtins.c:207: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:207: 
-  function pow: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:207: 
   function pow: precondition 'finite_logic_res' got status valid.
 [eva] computing for function double_interval <- test_pow_singleton_exp <- main.
@@ -583,14 +479,10 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:210: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:210: 
-  function pow: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:210: 
   function pow: precondition 'finite_logic_res' got status valid.
 [eva] tests/float/math_builtins.c:211: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:211: 
-  function pow: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:211: 
   function pow: precondition 'finite_logic_res' got status valid.
 [eva] Recording results for test_pow_singleton_exp
@@ -603,8 +495,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:218: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:218: 
-  function pow: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:218: 
   function pow: precondition 'finite_logic_res' got status valid.
 [eva] computing for function double_interval <- test_pow <- main.
@@ -613,8 +503,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:220: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:220: 
-  function pow: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:220: 
   function pow: precondition 'finite_logic_res' got status valid.
 [eva] computing for function double_interval <- test_pow <- main.
@@ -623,8 +511,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:222: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:222: 
-  function pow: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:222: 
   function pow: precondition 'finite_logic_res' got status valid.
 [eva] computing for function double_interval <- test_pow <- main.
@@ -637,8 +523,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:230: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:230: 
-  function pow: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:230: Warning: 
   function pow: precondition 'finite_logic_res' got status unknown.
 [eva] computing for function double_interval <- test_pow <- main.
@@ -647,8 +531,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:232: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:232: 
-  function pow: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:232: Warning: 
   function pow: precondition 'finite_logic_res' got status unknown.
 [eva] computing for function double_interval <- test_pow <- main.
@@ -657,8 +539,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:234: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:234: 
-  function pow: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:234: Warning: 
   function pow: precondition 'finite_logic_res' got status unknown.
 [eva] computing for function double_interval <- test_pow <- main.
@@ -671,8 +551,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:237: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:237: 
-  function pow: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:237: 
   function pow: precondition 'finite_logic_res' got status valid.
 [eva] computing for function double_interval <- test_pow <- main.
@@ -685,8 +563,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:242: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:242: 
-  function pow: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:242: 
   function pow: precondition 'finite_logic_res' got status valid.
 [eva] computing for function double_interval <- test_pow <- main.
@@ -699,8 +575,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:247: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:247: 
-  function pow: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:247: Warning: 
   function pow: precondition 'finite_logic_res' got status unknown.
 [eva] computing for function double_interval <- test_pow <- main.
@@ -713,8 +587,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:250: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:250: 
-  function pow: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:250: Warning: 
   function pow: precondition 'finite_logic_res' got status unknown.
 [eva] computing for function double_interval <- test_pow <- main.
@@ -727,8 +599,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:256: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:256: 
-  function pow: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:256: Warning: 
   function pow: precondition 'finite_logic_res' got status unknown.
 [eva] computing for function double_interval <- test_pow <- main.
@@ -741,8 +611,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:261: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:261: 
-  function pow: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:261: Warning: 
   function pow: precondition 'finite_logic_res' got status unknown.
 [eva] computing for function double_interval <- test_pow <- main.
@@ -755,8 +623,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:266: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:266: 
-  function pow: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:266: 
   function pow: precondition 'finite_logic_res' got status valid.
 [eva] computing for function double_interval <- test_pow <- main.
@@ -769,8 +635,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:271: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:271: 
-  function pow: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:271: Warning: 
   function pow: precondition 'finite_logic_res' got status unknown.
 [eva] computing for function double_interval <- test_pow <- main.
@@ -783,8 +647,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:276: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:276: 
-  function pow: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:276: Warning: 
   function pow: precondition 'finite_logic_res' got status invalid.
 [eva] computing for function double_interval <- test_pow <- main.
@@ -793,8 +655,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:278: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:278: 
-  function pow: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:278: Warning: 
   function pow: precondition 'finite_logic_res' got status unknown.
 [eva] computing for function double_interval <- test_pow <- main.
@@ -803,8 +663,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:280: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:280: 
-  function pow: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:280: Warning: 
   function pow: precondition 'finite_logic_res' got status unknown.
 [eva] computing for function double_interval <- test_pow <- main.
@@ -813,8 +671,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:282: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:282: 
-  function pow: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:282: Warning: 
   function pow: precondition 'finite_logic_res' got status unknown.
 [eva] computing for function double_interval <- test_pow <- main.
@@ -827,8 +683,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:287: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:287: 
-  function pow: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:287: Warning: 
   function pow: precondition 'finite_logic_res' got status invalid.
 [eva] computing for function double_interval <- test_pow <- main.
@@ -841,8 +695,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:292: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:292: 
-  function pow: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:292: Warning: 
   function pow: precondition 'finite_logic_res' got status unknown.
 [eva] tests/float/math_builtins.c:292: Frama_C_show_each_unreachable:
@@ -852,8 +704,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:295: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:295: 
-  function pow: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:295: 
   function pow: precondition 'finite_logic_res' got status valid.
 [eva] Recording results for test_pow
@@ -863,45 +713,31 @@
 [eva] tests/float/math_builtins.c:405: 
   Call to builtin Frama_C_fmod for function fmod
 [eva] tests/float/math_builtins.c:405: 
-  function fmod: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:405: 
-  function fmod: precondition 'finite_logic_result' got status valid.
+  function fmod: precondition 'in_domain' got status valid.
 [eva] tests/float/math_builtins.c:406: 
   Call to builtin Frama_C_fmod for function fmod
 [eva] tests/float/math_builtins.c:406: 
-  function fmod: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:406: 
-  function fmod: precondition 'finite_logic_result' got status valid.
+  function fmod: precondition 'in_domain' got status valid.
 [eva] tests/float/math_builtins.c:407: 
   Call to builtin Frama_C_fmod for function fmod
 [eva] tests/float/math_builtins.c:407: 
-  function fmod: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:407: 
-  function fmod: precondition 'finite_logic_result' got status valid.
+  function fmod: precondition 'in_domain' got status valid.
 [eva] tests/float/math_builtins.c:408: 
   Call to builtin Frama_C_fmod for function fmod
 [eva] tests/float/math_builtins.c:408: 
-  function fmod: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:408: 
-  function fmod: precondition 'finite_logic_result' got status valid.
+  function fmod: precondition 'in_domain' got status valid.
 [eva] tests/float/math_builtins.c:409: 
   Call to builtin Frama_C_fmod for function fmod
 [eva] tests/float/math_builtins.c:409: 
-  function fmod: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:409: 
-  function fmod: precondition 'finite_logic_result' got status valid.
+  function fmod: precondition 'in_domain' got status valid.
 [eva] tests/float/math_builtins.c:410: 
   Call to builtin Frama_C_fmod for function fmod
 [eva] tests/float/math_builtins.c:410: 
-  function fmod: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:410: 
-  function fmod: precondition 'finite_logic_result' got status valid.
+  function fmod: precondition 'in_domain' got status valid.
 [eva] tests/float/math_builtins.c:411: 
   Call to builtin Frama_C_fmod for function fmod
-[eva] tests/float/math_builtins.c:411: 
-  function fmod: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:411: Warning: 
-  function fmod: precondition 'finite_logic_result' got status invalid.
+  function fmod: precondition 'in_domain' got status invalid.
 [eva] Recording results for test_fmod_det
 [eva] Done for function test_fmod_det
 [eva] computing for function test_fmod <- main.
@@ -913,27 +749,19 @@
 [eva] tests/float/math_builtins.c:417: 
   Call to builtin Frama_C_fmod for function fmod
 [eva] tests/float/math_builtins.c:417: 
-  function fmod: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:417: 
-  function fmod: precondition 'finite_logic_result' got status valid.
+  function fmod: precondition 'in_domain' got status valid.
 [eva] tests/float/math_builtins.c:418: 
   Call to builtin Frama_C_fmod for function fmod
 [eva] tests/float/math_builtins.c:418: 
-  function fmod: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:418: 
-  function fmod: precondition 'finite_logic_result' got status valid.
+  function fmod: precondition 'in_domain' got status valid.
 [eva] tests/float/math_builtins.c:419: 
   Call to builtin Frama_C_fmod for function fmod
 [eva] tests/float/math_builtins.c:419: 
-  function fmod: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:419: 
-  function fmod: precondition 'finite_logic_result' got status valid.
+  function fmod: precondition 'in_domain' got status valid.
 [eva] tests/float/math_builtins.c:420: 
   Call to builtin Frama_C_fmod for function fmod
 [eva] tests/float/math_builtins.c:420: 
-  function fmod: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:420: 
-  function fmod: precondition 'finite_logic_result' got status valid.
+  function fmod: precondition 'in_domain' got status valid.
 [eva] computing for function double_interval <- test_fmod <- main.
   Called from tests/float/math_builtins.c:421.
 [eva] Recording results for double_interval
@@ -941,15 +769,11 @@
 [eva] tests/float/math_builtins.c:422: 
   Call to builtin Frama_C_fmod for function fmod
 [eva] tests/float/math_builtins.c:422: 
-  function fmod: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:422: 
-  function fmod: precondition 'finite_logic_result' got status valid.
+  function fmod: precondition 'in_domain' got status valid.
 [eva] tests/float/math_builtins.c:423: 
   Call to builtin Frama_C_fmod for function fmod
 [eva] tests/float/math_builtins.c:423: 
-  function fmod: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:423: 
-  function fmod: precondition 'finite_logic_result' got status valid.
+  function fmod: precondition 'in_domain' got status valid.
 [eva] computing for function double_interval <- test_fmod <- main.
   Called from tests/float/math_builtins.c:424.
 [eva] Recording results for double_interval
@@ -961,9 +785,7 @@
 [eva] tests/float/math_builtins.c:426: 
   Call to builtin Frama_C_fmod for function fmod
 [eva] tests/float/math_builtins.c:426: 
-  function fmod: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:426: 
-  function fmod: precondition 'finite_logic_result' got status valid.
+  function fmod: precondition 'in_domain' got status valid.
 [eva] computing for function double_interval <- test_fmod <- main.
   Called from tests/float/math_builtins.c:427.
 [eva] Recording results for double_interval
@@ -975,15 +797,11 @@
 [eva] tests/float/math_builtins.c:429: 
   Call to builtin Frama_C_fmod for function fmod
 [eva] tests/float/math_builtins.c:429: 
-  function fmod: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:429: 
-  function fmod: precondition 'finite_logic_result' got status valid.
+  function fmod: precondition 'in_domain' got status valid.
 [eva] tests/float/math_builtins.c:430: 
   Call to builtin Frama_C_fmod for function fmod
 [eva] tests/float/math_builtins.c:430: 
-  function fmod: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:430: 
-  function fmod: precondition 'finite_logic_result' got status valid.
+  function fmod: precondition 'in_domain' got status valid.
 [eva] computing for function double_interval <- test_fmod <- main.
   Called from tests/float/math_builtins.c:431.
 [eva] Recording results for double_interval
@@ -994,10 +812,8 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:433: 
   Call to builtin Frama_C_fmod for function fmod
-[eva] tests/float/math_builtins.c:433: 
-  function fmod: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:433: Warning: 
-  function fmod: precondition 'finite_logic_result' got status unknown.
+  function fmod: precondition 'in_domain' got status unknown.
 [eva] computing for function double_interval <- test_fmod <- main.
   Called from tests/float/math_builtins.c:434.
 [eva] Recording results for double_interval
@@ -1008,40 +824,32 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:436: 
   Call to builtin Frama_C_fmod for function fmod
-[eva] tests/float/math_builtins.c:436: 
-  function fmod: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:436: Warning: 
-  function fmod: precondition 'finite_logic_result' got status unknown.
+  function fmod: precondition 'in_domain' got status unknown.
 [eva] computing for function double_interval <- test_fmod <- main.
   Called from tests/float/math_builtins.c:437.
 [eva] Recording results for double_interval
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:438: 
   Call to builtin Frama_C_fmod for function fmod
-[eva] tests/float/math_builtins.c:438: 
-  function fmod: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:438: Warning: 
-  function fmod: precondition 'finite_logic_result' got status invalid.
+  function fmod: precondition 'in_domain' got status invalid.
 [eva] computing for function double_interval <- test_fmod <- main.
   Called from tests/float/math_builtins.c:439.
 [eva] Recording results for double_interval
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:440: 
   Call to builtin Frama_C_fmod for function fmod
-[eva] tests/float/math_builtins.c:440: 
-  function fmod: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:440: Warning: 
-  function fmod: precondition 'finite_logic_result' got status unknown.
+  function fmod: precondition 'in_domain' got status unknown.
 [eva] computing for function double_interval <- test_fmod <- main.
   Called from tests/float/math_builtins.c:441.
 [eva] Recording results for double_interval
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:442: 
   Call to builtin Frama_C_fmod for function fmod
-[eva] tests/float/math_builtins.c:442: 
-  function fmod: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:442: Warning: 
-  function fmod: precondition 'finite_logic_result' got status unknown.
+  function fmod: precondition 'in_domain' got status unknown.
 [eva] computing for function double_interval <- test_fmod <- main.
   Called from tests/float/math_builtins.c:443.
 [eva] Recording results for double_interval
@@ -1049,9 +857,7 @@
 [eva] tests/float/math_builtins.c:444: 
   Call to builtin Frama_C_fmod for function fmod
 [eva] tests/float/math_builtins.c:444: 
-  function fmod: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:444: 
-  function fmod: precondition 'finite_logic_result' got status valid.
+  function fmod: precondition 'in_domain' got status valid.
 [eva] computing for function double_interval <- test_fmod <- main.
   Called from tests/float/math_builtins.c:445.
 [eva] Recording results for double_interval
@@ -1059,9 +865,7 @@
 [eva] tests/float/math_builtins.c:446: 
   Call to builtin Frama_C_fmod for function fmod
 [eva] tests/float/math_builtins.c:446: 
-  function fmod: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:446: 
-  function fmod: precondition 'finite_logic_result' got status valid.
+  function fmod: precondition 'in_domain' got status valid.
 [eva] computing for function double_interval <- test_fmod <- main.
   Called from tests/float/math_builtins.c:447.
 [eva] Recording results for double_interval
@@ -1069,9 +873,7 @@
 [eva] tests/float/math_builtins.c:448: 
   Call to builtin Frama_C_fmod for function fmod
 [eva] tests/float/math_builtins.c:448: 
-  function fmod: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:448: 
-  function fmod: precondition 'finite_logic_result' got status valid.
+  function fmod: precondition 'in_domain' got status valid.
 [eva] computing for function double_interval <- test_fmod <- main.
   Called from tests/float/math_builtins.c:449.
 [eva] Recording results for double_interval
@@ -1079,9 +881,7 @@
 [eva] tests/float/math_builtins.c:450: 
   Call to builtin Frama_C_fmod for function fmod
 [eva] tests/float/math_builtins.c:450: 
-  function fmod: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:450: 
-  function fmod: precondition 'finite_logic_result' got status valid.
+  function fmod: precondition 'in_domain' got status valid.
 [eva] computing for function double_interval <- test_fmod <- main.
   Called from tests/float/math_builtins.c:451.
 [eva] Recording results for double_interval
@@ -1089,9 +889,7 @@
 [eva] tests/float/math_builtins.c:452: 
   Call to builtin Frama_C_fmod for function fmod
 [eva] tests/float/math_builtins.c:452: 
-  function fmod: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:452: 
-  function fmod: precondition 'finite_logic_result' got status valid.
+  function fmod: precondition 'in_domain' got status valid.
 [eva] computing for function double_interval <- test_fmod <- main.
   Called from tests/float/math_builtins.c:453.
 [eva] Recording results for double_interval
@@ -1099,9 +897,7 @@
 [eva] tests/float/math_builtins.c:454: 
   Call to builtin Frama_C_fmod for function fmod
 [eva] tests/float/math_builtins.c:454: 
-  function fmod: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:454: 
-  function fmod: precondition 'finite_logic_result' got status valid.
+  function fmod: precondition 'in_domain' got status valid.
 [eva] computing for function double_interval <- test_fmod <- main.
   Called from tests/float/math_builtins.c:455.
 [eva] Recording results for double_interval
@@ -1109,9 +905,7 @@
 [eva] tests/float/math_builtins.c:456: 
   Call to builtin Frama_C_fmod for function fmod
 [eva] tests/float/math_builtins.c:456: 
-  function fmod: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:456: 
-  function fmod: precondition 'finite_logic_result' got status valid.
+  function fmod: precondition 'in_domain' got status valid.
 [eva] computing for function double_interval <- test_fmod <- main.
   Called from tests/float/math_builtins.c:457.
 [eva] Recording results for double_interval
@@ -1119,9 +913,7 @@
 [eva] tests/float/math_builtins.c:458: 
   Call to builtin Frama_C_fmod for function fmod
 [eva] tests/float/math_builtins.c:458: 
-  function fmod: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:458: 
-  function fmod: precondition 'finite_logic_result' got status valid.
+  function fmod: precondition 'in_domain' got status valid.
 [eva] computing for function double_interval <- test_fmod <- main.
   Called from tests/float/math_builtins.c:459.
 [eva] Recording results for double_interval
@@ -1133,9 +925,7 @@
 [eva] tests/float/math_builtins.c:461: 
   Call to builtin Frama_C_fmod for function fmod
 [eva] tests/float/math_builtins.c:461: 
-  function fmod: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:461: 
-  function fmod: precondition 'finite_logic_result' got status valid.
+  function fmod: precondition 'in_domain' got status valid.
 [eva] computing for function double_interval <- test_fmod <- main.
   Called from tests/float/math_builtins.c:462.
 [eva] Recording results for double_interval
@@ -1143,9 +933,7 @@
 [eva] tests/float/math_builtins.c:463: 
   Call to builtin Frama_C_fmod for function fmod
 [eva] tests/float/math_builtins.c:463: 
-  function fmod: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:463: 
-  function fmod: precondition 'finite_logic_result' got status valid.
+  function fmod: precondition 'in_domain' got status valid.
 [eva] computing for function double_interval <- test_fmod <- main.
   Called from tests/float/math_builtins.c:464.
 [eva] Recording results for double_interval
@@ -1153,9 +941,7 @@
 [eva] tests/float/math_builtins.c:465: 
   Call to builtin Frama_C_fmod for function fmod
 [eva] tests/float/math_builtins.c:465: 
-  function fmod: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:465: 
-  function fmod: precondition 'finite_logic_result' got status valid.
+  function fmod: precondition 'in_domain' got status valid.
 [eva] computing for function double_interval <- test_fmod <- main.
   Called from tests/float/math_builtins.c:466.
 [eva] Recording results for double_interval
@@ -1163,9 +949,7 @@
 [eva] tests/float/math_builtins.c:467: 
   Call to builtin Frama_C_fmod for function fmod
 [eva] tests/float/math_builtins.c:467: 
-  function fmod: precondition 'finite_args' got status valid.
-[eva] tests/float/math_builtins.c:467: 
-  function fmod: precondition 'finite_logic_result' got status valid.
+  function fmod: precondition 'in_domain' got status valid.
 [eva] computing for function double_interval <- test_fmod <- main.
   Called from tests/float/math_builtins.c:468.
 [eva] Recording results for double_interval
@@ -1176,30 +960,24 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:470: 
   Call to builtin Frama_C_fmod for function fmod
-[eva] tests/float/math_builtins.c:470: 
-  function fmod: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:470: Warning: 
-  function fmod: precondition 'finite_logic_result' got status unknown.
+  function fmod: precondition 'in_domain' got status unknown.
 [eva] computing for function double_interval <- test_fmod <- main.
   Called from tests/float/math_builtins.c:471.
 [eva] Recording results for double_interval
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:472: 
   Call to builtin Frama_C_fmod for function fmod
-[eva] tests/float/math_builtins.c:472: 
-  function fmod: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:472: Warning: 
-  function fmod: precondition 'finite_logic_result' got status unknown.
+  function fmod: precondition 'in_domain' got status unknown.
 [eva] computing for function double_interval <- test_fmod <- main.
   Called from tests/float/math_builtins.c:473.
 [eva] Recording results for double_interval
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:474: 
   Call to builtin Frama_C_fmod for function fmod
-[eva] tests/float/math_builtins.c:474: 
-  function fmod: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:474: Warning: 
-  function fmod: precondition 'finite_logic_result' got status unknown.
+  function fmod: precondition 'in_domain' got status unknown.
 [eva] Recording results for test_fmod
 [eva] Done for function test_fmod
 [eva] computing for function test_sqrt_det <- main.
@@ -1285,39 +1063,58 @@
 [eva] tests/float/math_builtins.c:516: 
   Call to builtin Frama_C_exp for function exp
 [eva] tests/float/math_builtins.c:516: 
-  function exp: precondition 'finite_arg' got status valid.
+  function exp: precondition ¬(overflow_arg:
+                                  \is_finite(x) ∧ x > 0x1.62e42fefa39efp+9) got status valid.
+[eva] tests/float/math_builtins.c:516: 
+  function exp: precondition ¬(plus_infinity_arg: \is_plus_infinity(x)) got status valid.
 [eva] tests/float/math_builtins.c:516: 
-  function exp: precondition 'finite_domain' got status valid.
+  function exp: precondition ¬(nan_arg: \is_NaN(x)) got status valid.
 [eva] tests/float/math_builtins.c:517: 
   Call to builtin Frama_C_exp for function exp
 [eva] tests/float/math_builtins.c:517: 
-  function exp: precondition 'finite_arg' got status valid.
+  function exp: precondition ¬(overflow_arg:
+                                  \is_finite(x) ∧ x > 0x1.62e42fefa39efp+9) got status valid.
+[eva] tests/float/math_builtins.c:517: 
+  function exp: precondition ¬(plus_infinity_arg: \is_plus_infinity(x)) got status valid.
 [eva] tests/float/math_builtins.c:517: 
-  function exp: precondition 'finite_domain' got status valid.
+  function exp: precondition ¬(nan_arg: \is_NaN(x)) got status valid.
 [eva] tests/float/math_builtins.c:518: 
   Call to builtin Frama_C_exp for function exp
 [eva] tests/float/math_builtins.c:518: 
-  function exp: precondition 'finite_arg' got status valid.
+  function exp: precondition ¬(overflow_arg:
+                                  \is_finite(x) ∧ x > 0x1.62e42fefa39efp+9) got status valid.
 [eva] tests/float/math_builtins.c:518: 
-  function exp: precondition 'finite_domain' got status valid.
+  function exp: precondition ¬(plus_infinity_arg: \is_plus_infinity(x)) got status valid.
+[eva] tests/float/math_builtins.c:518: 
+  function exp: precondition ¬(nan_arg: \is_NaN(x)) got status valid.
 [eva] tests/float/math_builtins.c:519: 
   Call to builtin Frama_C_exp for function exp
 [eva] tests/float/math_builtins.c:519: 
-  function exp: precondition 'finite_arg' got status valid.
+  function exp: precondition ¬(overflow_arg:
+                                  \is_finite(x) ∧ x > 0x1.62e42fefa39efp+9) got status valid.
+[eva] tests/float/math_builtins.c:519: 
+  function exp: precondition ¬(plus_infinity_arg: \is_plus_infinity(x)) got status valid.
 [eva] tests/float/math_builtins.c:519: 
-  function exp: precondition 'finite_domain' got status valid.
+  function exp: precondition ¬(nan_arg: \is_NaN(x)) got status valid.
 [eva] tests/float/math_builtins.c:520: 
   Call to builtin Frama_C_exp for function exp
 [eva] tests/float/math_builtins.c:520: 
-  function exp: precondition 'finite_arg' got status valid.
+  function exp: precondition ¬(overflow_arg:
+                                  \is_finite(x) ∧ x > 0x1.62e42fefa39efp+9) got status valid.
+[eva] tests/float/math_builtins.c:520: 
+  function exp: precondition ¬(plus_infinity_arg: \is_plus_infinity(x)) got status valid.
 [eva] tests/float/math_builtins.c:520: 
-  function exp: precondition 'finite_domain' got status valid.
+  function exp: precondition ¬(nan_arg: \is_NaN(x)) got status valid.
 [eva] tests/float/math_builtins.c:521: 
   Call to builtin Frama_C_exp for function exp
-[eva] tests/float/math_builtins.c:521: 
-  function exp: precondition 'finite_arg' got status valid.
 [eva:alarm] tests/float/math_builtins.c:521: Warning: 
-  function exp: precondition 'finite_domain' got status invalid.
+  function exp: precondition ¬(overflow_arg:
+                                  \is_finite(x) ∧ x > 0x1.62e42fefa39efp+9) got status invalid.
+[eva] tests/float/math_builtins.c:521: 
+  function exp: no state left, precondition ¬(plus_infinity_arg:
+                                                 \is_plus_infinity(x)) got status valid.
+[eva] tests/float/math_builtins.c:521: 
+  function exp: no state left, precondition ¬(nan_arg: \is_NaN(x)) got status valid.
 [eva] Recording results for test_exp_det
 [eva] Done for function test_exp_det
 [eva] computing for function test_log_det <- main.
@@ -1404,50 +1201,34 @@
   Called from tests/float/math_builtins.c:744.
 [eva] tests/float/math_builtins.c:156: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:156: 
-  function powf: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:156: 
   function powf: precondition 'finite_logic_res' got status valid.
 [eva] tests/float/math_builtins.c:157: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:157: 
-  function powf: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:157: 
   function powf: precondition 'finite_logic_res' got status valid.
 [eva] tests/float/math_builtins.c:158: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:158: 
-  function powf: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:158: 
   function powf: precondition 'finite_logic_res' got status valid.
 [eva] tests/float/math_builtins.c:159: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:159: 
-  function powf: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:159: 
   function powf: precondition 'finite_logic_res' got status valid.
 [eva] tests/float/math_builtins.c:160: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:160: 
-  function powf: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:160: 
   function powf: precondition 'finite_logic_res' got status valid.
 [eva] tests/float/math_builtins.c:161: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:161: 
-  function powf: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:161: 
   function powf: precondition 'finite_logic_res' got status valid.
 [eva] tests/float/math_builtins.c:162: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:162: 
-  function powf: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:162: 
   function powf: precondition 'finite_logic_res' got status valid.
 [eva] tests/float/math_builtins.c:163: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:163: 
-  function powf: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:163: 
   function powf: precondition 'finite_logic_res' got status valid.
 [eva] Recording results for test_powf_det
@@ -1460,14 +1241,10 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:303: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:303: 
-  function powf: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:303: Warning: 
   function powf: precondition 'finite_logic_res' got status invalid.
 [eva] tests/float/math_builtins.c:305: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:305: 
-  function powf: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:305: Warning: 
   function powf: precondition 'finite_logic_res' got status invalid.
 [eva] computing for function double_interval <- test_powf_singleton_exp <- main.
@@ -1476,26 +1253,18 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:309: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:309: 
-  function powf: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:309: Warning: 
   function powf: precondition 'finite_logic_res' got status unknown.
 [eva] tests/float/math_builtins.c:310: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:310: 
-  function powf: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:310: Warning: 
   function powf: precondition 'finite_logic_res' got status unknown.
 [eva] tests/float/math_builtins.c:313: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:313: 
-  function powf: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:313: Warning: 
   function powf: precondition 'finite_logic_res' got status unknown.
 [eva] tests/float/math_builtins.c:314: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:314: 
-  function powf: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:314: Warning: 
   function powf: precondition 'finite_logic_res' got status unknown.
 [eva] computing for function double_interval <- test_powf_singleton_exp <- main.
@@ -1504,8 +1273,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:318: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:318: 
-  function powf: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:318: 
   function powf: precondition 'finite_logic_res' got status valid.
 [eva] computing for function double_interval <- test_powf_singleton_exp <- main.
@@ -1514,8 +1281,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:320: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:320: 
-  function powf: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:320: Warning: 
   function powf: precondition 'finite_logic_res' got status unknown.
 [eva] computing for function double_interval <- test_powf_singleton_exp <- main.
@@ -1524,8 +1289,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:324: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:324: 
-  function powf: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:324: 
   function powf: precondition 'finite_logic_res' got status valid.
 [eva] tests/float/math_builtins.c:325: 
@@ -1536,21 +1299,15 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:327: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:327: 
-  function powf: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:327: 
   function powf: precondition 'finite_logic_res' got status valid.
 [eva] tests/float/math_builtins.c:328: Frama_C_show_each_j: {0}
 [eva] tests/float/math_builtins.c:332: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:332: 
-  function powf: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:332: 
   function powf: precondition 'finite_logic_res' got status valid.
 [eva] tests/float/math_builtins.c:333: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:333: 
-  function powf: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:333: 
   function powf: precondition 'finite_logic_res' got status valid.
 [eva] computing for function double_interval <- test_powf_singleton_exp <- main.
@@ -1559,32 +1316,22 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:336: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:336: 
-  function powf: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:336: 
   function powf: precondition 'finite_logic_res' got status valid.
 [eva] tests/float/math_builtins.c:337: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:337: 
-  function powf: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:337: 
   function powf: precondition 'finite_logic_res' got status valid.
 [eva] tests/float/math_builtins.c:338: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:338: 
-  function powf: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:338: 
   function powf: precondition 'finite_logic_res' got status valid.
 [eva] tests/float/math_builtins.c:339: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:339: 
-  function powf: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:339: 
   function powf: precondition 'finite_logic_res' got status valid.
 [eva] tests/float/math_builtins.c:340: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:340: 
-  function powf: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:340: 
   function powf: precondition 'finite_logic_res' got status valid.
 [eva] computing for function double_interval <- test_powf_singleton_exp <- main.
@@ -1593,14 +1340,10 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:343: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:343: 
-  function powf: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:343: 
   function powf: precondition 'finite_logic_res' got status valid.
 [eva] tests/float/math_builtins.c:344: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:344: 
-  function powf: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:344: 
   function powf: precondition 'finite_logic_res' got status valid.
 [eva] Recording results for test_powf_singleton_exp
@@ -1613,8 +1356,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:351: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:351: 
-  function powf: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:351: 
   function powf: precondition 'finite_logic_res' got status valid.
 [eva] computing for function double_interval <- test_powf <- main.
@@ -1623,8 +1364,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:353: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:353: 
-  function powf: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:353: 
   function powf: precondition 'finite_logic_res' got status valid.
 [eva] computing for function double_interval <- test_powf <- main.
@@ -1633,8 +1372,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:355: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:355: 
-  function powf: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:355: 
   function powf: precondition 'finite_logic_res' got status valid.
 [eva] computing for function double_interval <- test_powf <- main.
@@ -1647,8 +1384,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:363: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:363: 
-  function powf: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:363: Warning: 
   function powf: precondition 'finite_logic_res' got status unknown.
 [eva] computing for function double_interval <- test_powf <- main.
@@ -1657,8 +1392,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:365: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:365: 
-  function powf: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:365: Warning: 
   function powf: precondition 'finite_logic_res' got status unknown.
 [eva] computing for function double_interval <- test_powf <- main.
@@ -1667,8 +1400,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:367: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:367: 
-  function powf: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:367: Warning: 
   function powf: precondition 'finite_logic_res' got status unknown.
 [eva] computing for function double_interval <- test_powf <- main.
@@ -1681,8 +1412,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:370: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:370: 
-  function powf: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:370: 
   function powf: precondition 'finite_logic_res' got status valid.
 [eva] computing for function double_interval <- test_powf <- main.
@@ -1695,8 +1424,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:375: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:375: 
-  function powf: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:375: 
   function powf: precondition 'finite_logic_res' got status valid.
 [eva] computing for function double_interval <- test_powf <- main.
@@ -1709,8 +1436,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:380: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:380: 
-  function powf: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:380: Warning: 
   function powf: precondition 'finite_logic_res' got status unknown.
 [eva] computing for function double_interval <- test_powf <- main.
@@ -1723,8 +1448,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:385: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:385: 
-  function powf: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:385: Warning: 
   function powf: precondition 'finite_logic_res' got status unknown.
 [eva] computing for function double_interval <- test_powf <- main.
@@ -1737,8 +1460,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:391: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:391: 
-  function powf: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:391: Warning: 
   function powf: precondition 'finite_logic_res' got status unknown.
 [eva] computing for function double_interval <- test_powf <- main.
@@ -1751,8 +1472,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:396: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:396: 
-  function powf: precondition 'finite_args' got status valid.
 [eva:alarm] tests/float/math_builtins.c:396: Warning: 
   function powf: precondition 'finite_logic_res' got status unknown.
 [eva] computing for function double_interval <- test_powf <- main.
@@ -1765,8 +1484,6 @@
 [eva] Done for function double_interval
 [eva] tests/float/math_builtins.c:401: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:401: 
-  function powf: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:401: 
   function powf: precondition 'finite_logic_res' got status valid.
 [eva] Recording results for test_powf
@@ -1854,33 +1571,48 @@
 [eva] tests/float/math_builtins.c:525: 
   Call to builtin Frama_C_expf for function expf
 [eva] tests/float/math_builtins.c:525: 
-  function expf: precondition 'finite_arg' got status valid.
+  function expf: precondition ¬(overflow_arg:
+                                   \is_finite(x) ∧ x > 0x1.62e42ep+6) got status valid.
+[eva] tests/float/math_builtins.c:525: 
+  function expf: precondition ¬(plus_infinity_arg: \is_plus_infinity(x)) got status valid.
 [eva] tests/float/math_builtins.c:525: 
-  function expf: precondition 'res_finite' got status valid.
+  function expf: precondition ¬(nan_arg: \is_NaN(x)) got status valid.
 [eva] tests/float/math_builtins.c:526: 
   Call to builtin Frama_C_expf for function expf
 [eva] tests/float/math_builtins.c:526: 
-  function expf: precondition 'finite_arg' got status valid.
+  function expf: precondition ¬(overflow_arg:
+                                   \is_finite(x) ∧ x > 0x1.62e42ep+6) got status valid.
 [eva] tests/float/math_builtins.c:526: 
-  function expf: precondition 'res_finite' got status valid.
+  function expf: precondition ¬(plus_infinity_arg: \is_plus_infinity(x)) got status valid.
+[eva] tests/float/math_builtins.c:526: 
+  function expf: precondition ¬(nan_arg: \is_NaN(x)) got status valid.
 [eva] tests/float/math_builtins.c:527: 
   Call to builtin Frama_C_expf for function expf
 [eva] tests/float/math_builtins.c:527: 
-  function expf: precondition 'finite_arg' got status valid.
+  function expf: precondition ¬(overflow_arg:
+                                   \is_finite(x) ∧ x > 0x1.62e42ep+6) got status valid.
+[eva] tests/float/math_builtins.c:527: 
+  function expf: precondition ¬(plus_infinity_arg: \is_plus_infinity(x)) got status valid.
 [eva] tests/float/math_builtins.c:527: 
-  function expf: precondition 'res_finite' got status valid.
+  function expf: precondition ¬(nan_arg: \is_NaN(x)) got status valid.
 [eva] tests/float/math_builtins.c:528: 
   Call to builtin Frama_C_expf for function expf
 [eva] tests/float/math_builtins.c:528: 
-  function expf: precondition 'finite_arg' got status valid.
+  function expf: precondition ¬(overflow_arg:
+                                   \is_finite(x) ∧ x > 0x1.62e42ep+6) got status valid.
+[eva] tests/float/math_builtins.c:528: 
+  function expf: precondition ¬(plus_infinity_arg: \is_plus_infinity(x)) got status valid.
 [eva] tests/float/math_builtins.c:528: 
-  function expf: precondition 'res_finite' got status valid.
+  function expf: precondition ¬(nan_arg: \is_NaN(x)) got status valid.
 [eva] tests/float/math_builtins.c:529: 
   Call to builtin Frama_C_expf for function expf
 [eva] tests/float/math_builtins.c:529: 
-  function expf: precondition 'finite_arg' got status valid.
+  function expf: precondition ¬(overflow_arg:
+                                   \is_finite(x) ∧ x > 0x1.62e42ep+6) got status valid.
 [eva] tests/float/math_builtins.c:529: 
-  function expf: precondition 'res_finite' got status valid.
+  function expf: precondition ¬(plus_infinity_arg: \is_plus_infinity(x)) got status valid.
+[eva] tests/float/math_builtins.c:529: 
+  function expf: precondition ¬(nan_arg: \is_NaN(x)) got status valid.
 [eva] Recording results for test_expf_det
 [eva] Done for function test_expf_det
 [eva] computing for function test_logf_det <- main.
@@ -1967,14 +1699,10 @@
   Called from tests/float/math_builtins.c:753.
 [eva] tests/float/math_builtins.c:569: 
   Call to builtin Frama_C_pow for function pow
-[eva] tests/float/math_builtins.c:569: 
-  function pow: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:569: 
   function pow: precondition 'finite_logic_res' got status valid.
 [eva] tests/float/math_builtins.c:570: 
   Call to builtin Frama_C_powf for function powf
-[eva] tests/float/math_builtins.c:570: 
-  function powf: precondition 'finite_args' got status valid.
 [eva] tests/float/math_builtins.c:570: 
   function powf: precondition 'finite_logic_res' got status valid.
 [eva] Recording results for test_diff_pow_powf
@@ -2524,15 +2252,18 @@
   y ∈ {1.0000000000000000}
   z ∈ {1.0806046117362795*2^-1}
 [eva:final-states] Values at end of function test_diff_pow_powf:
+  __fc_errno ∈ [--..--]
   d ∈ {1.3824840787361052*2^-96}
   f32__f ∈ {1.382483*2^-96}
 [eva:final-states] Values at end of function test_exp_det:
+  __fc_errno ∈ [--..--]
   a ∈ {1.7094457008275896*2^60}
   b ∈ {1.0826822658929016*2^-3}
   c ∈ {1.0000000000000000}
   d ∈ {1.0000000000000000}
   e ∈ {1.4715177646857693*2^-2}
 [eva:final-states] Values at end of function test_expf_det:
+  __fc_errno ∈ [--..--]
   f32__a ∈ {1.709445*2^60}
   f32__b ∈ {1.082682*2^-3}
   f32__c ∈ {1.000000}
@@ -2613,6 +2344,7 @@
   f32__a ∈ {3.740641}
   f32__b ∈ {-2.079441}
 [eva:final-states] Values at end of function test_pow:
+  __fc_errno ∈ [--..--]
   x ∈ [-1.4551915228366852*2^36 .. -1.1641532182693481*2^33]
   y ∈ [-1.0000000000000000*2^-1 .. 9.5000000000000000]
   a ∈ {1.0000000000000000}
@@ -2634,6 +2366,7 @@
   q ∈ [-1.9999999999999998*2^1023 .. 1.9999999999999998*2^1023]
   r ∈ [1.2649110640673517*2^-2 .. 1.4725502860585131*2^31]
 [eva:final-states] Values at end of function test_pow_det:
+  __fc_errno ∈ [--..--]
   a ∈ {1.0000000000000000}
   b ∈ {0}
   c ∈ {1.0000000000000000}
@@ -2643,6 +2376,7 @@
   g ∈ {1.6817928305074290*2^-21}
   h ∈ {1.0000000000000000}
 [eva:final-states] Values at end of function test_pow_singleton_exp:
+  __fc_errno ∈ [--..--]
   x ∈ [-3.5000000000000000 .. -1.0000000000000000*2^-3]
   c ∈ [0.0000000000000000 .. 4.5603590867386749]
   d ∈ [1.7542478229978975*2^-3 .. 1.9999999999999998*2^1023]
@@ -2662,6 +2396,7 @@
   r ∈ [1.3061224489795917*2^-4 .. 64.0000000000000000]
   s ∈ [-8.0000000000000000 .. -1.1428571428571428*2^-2]
 [eva:final-states] Values at end of function test_powf:
+  __fc_errno ∈ [--..--]
   f32__x ∈ [-0.000000 .. 10.000000]
   f32__y ∈ [-0.000000 .. 5.000000]
   f32__a ∈ {1.000000}
@@ -2678,6 +2413,7 @@
   f32__l ∈ [-1024.000000 .. 256.000000]
   f32__m ∈ [-0.000000 .. 1.525878*2^16]
 [eva:final-states] Values at end of function test_powf_det:
+  __fc_errno ∈ [--..--]
   f32__a ∈ {1.000000}
   f32__b ∈ {0}
   f32__c ∈ {1.000000}
@@ -2687,6 +2423,7 @@
   f32__g ∈ {1.681792*2^-21}
   f32__h ∈ {1.000000}
 [eva:final-states] Values at end of function test_powf_singleton_exp:
+  __fc_errno ∈ [--..--]
   f32__x ∈ [-3.500000 .. -1.000000*2^-3]
   f32__c ∈ [0.000000 .. 4.560359]
   f32__d ∈ [1.754247*2^-3 .. 1.999999*2^127]
@@ -2778,6 +2515,7 @@
   f32__e ∈ {-0.000000}
   f32__f ∈ {-1.000000}
 [eva:final-states] Values at end of function main:
+  __fc_errno ∈ [--..--]
   __retres ∈ {0}
 [from] Computing for function double_interval
 [from] Done for function double_interval
@@ -2948,8 +2686,10 @@
 [from] Function double_interval:
   \result FROM min; max; nondet
 [from] Function exp:
+  __fc_errno FROM x
   \result FROM x
 [from] Function expf:
+  __fc_errno FROM x
   \result FROM x
 [from] Function floor:
   \result FROM x
@@ -2966,8 +2706,10 @@
 [from] Function logf:
   \result FROM x
 [from] Function pow:
+  __fc_errno FROM x; y
   \result FROM x; y
 [from] Function powf:
+  __fc_errno FROM x; y
   \result FROM x; y
 [from] Function round:
   \result FROM x
@@ -3000,11 +2742,11 @@
 [from] Function test_cos_det:
   NO EFFECTS
 [from] Function test_diff_pow_powf:
-  NO EFFECTS
+  __fc_errno FROM \nothing
 [from] Function test_exp_det:
-  NO EFFECTS
+  __fc_errno FROM \nothing
 [from] Function test_expf_det:
-  NO EFFECTS
+  __fc_errno FROM \nothing
 [from] Function test_floor:
   NO EFFECTS
 [from] Function test_floor_det:
@@ -3026,17 +2768,17 @@
 [from] Function test_logf_det:
   NO EFFECTS
 [from] Function test_pow:
-  NO EFFECTS
+  __fc_errno FROM nondet
 [from] Function test_pow_det:
-  NO EFFECTS
+  __fc_errno FROM \nothing
 [from] Function test_pow_singleton_exp:
-  NO EFFECTS
+  __fc_errno FROM nondet
 [from] Function test_powf:
-  NO EFFECTS
+  __fc_errno FROM nondet
 [from] Function test_powf_det:
-  NO EFFECTS
+  __fc_errno FROM \nothing
 [from] Function test_powf_singleton_exp:
-  NO EFFECTS
+  __fc_errno FROM nondet
 [from] Function test_round:
   NO EFFECTS
 [from] Function test_round_det:
@@ -3068,6 +2810,7 @@
 [from] Function test_truncf_det:
   NO EFFECTS
 [from] Function main:
+  __fc_errno FROM \nothing
   \result FROM \nothing
 [from] ====== END OF DEPENDENCIES ======
 [inout] Out (internal) for function double_interval:
@@ -3118,15 +2861,15 @@
 [inout] Inputs for function test_cos_det:
     \nothing
 [inout] Out (internal) for function test_diff_pow_powf:
-    d; f32__f
+    __fc_errno; d; f32__f
 [inout] Inputs for function test_diff_pow_powf:
     \nothing
 [inout] Out (internal) for function test_exp_det:
-    a; b; c; d; e
+    __fc_errno; a; b; c; d; e
 [inout] Inputs for function test_exp_det:
     nondet
 [inout] Out (internal) for function test_expf_det:
-    f32__a; f32__b; f32__c; f32__d; f32__e
+    __fc_errno; f32__a; f32__b; f32__c; f32__d; f32__e
 [inout] Inputs for function test_expf_det:
     \nothing
 [inout] Out (internal) for function test_floor:
@@ -3171,32 +2914,33 @@
 [inout] Inputs for function test_logf_det:
     nondet
 [inout] Out (internal) for function test_pow:
-    x; y; a; b; c; d; e; f; g; h; i; j; k; l; m; n; o; p; q; r
+    __fc_errno; x; y; a; b; c; d; e; f; g; h; i; j; k; l; m; n; o; p; q; r
 [inout] Inputs for function test_pow:
     nondet
 [inout] Out (internal) for function test_pow_det:
-    a; b; c; d; e; f; g; h
+    __fc_errno; a; b; c; d; e; f; g; h
 [inout] Inputs for function test_pow_det:
     \nothing
 [inout] Out (internal) for function test_pow_singleton_exp:
-    x; c; d; e; f; g; h; i; j; k; l; m; n; o; p; q; r; s
+    __fc_errno; x; c; d; e; f; g; h; i; j; k; l; m; n; o; p; q; r; s
 [inout] Inputs for function test_pow_singleton_exp:
     nondet
 [inout] Out (internal) for function test_powf:
-    f32__x; f32__y; tmp; f32__a; tmp_1; f32__b; tmp_3; f32__c; tmp_5; tmp_6;
-    f32__d; tmp_8; f32__e; tmp_10; f32__f; tmp_12; tmp_13; f32__g; tmp_15;
-    tmp_16; f32__h; tmp_18; tmp_19; f32__i; tmp_21; tmp_22; f32__j; tmp_24;
-    tmp_25; f32__k; tmp_27; tmp_28; f32__l; tmp_30; tmp_31; f32__m
+    __fc_errno; f32__x; f32__y; tmp; f32__a; tmp_1; f32__b; tmp_3; f32__c;
+    tmp_5; tmp_6; f32__d; tmp_8; f32__e; tmp_10; f32__f; tmp_12; tmp_13;
+    f32__g; tmp_15; tmp_16; f32__h; tmp_18; tmp_19; f32__i; tmp_21; tmp_22;
+    f32__j; tmp_24; tmp_25; f32__k; tmp_27; tmp_28; f32__l; tmp_30; tmp_31;
+    f32__m
 [inout] Inputs for function test_powf:
     nondet
 [inout] Out (internal) for function test_powf_det:
-    f32__a; f32__b; f32__c; f32__d; f32__e; f32__f; f32__g; f32__h
+    __fc_errno; f32__a; f32__b; f32__c; f32__d; f32__e; f32__f; f32__g; f32__h
 [inout] Inputs for function test_powf_det:
     \nothing
 [inout] Out (internal) for function test_powf_singleton_exp:
-    f32__x; tmp; tmp_0; f32__c; f32__d; f32__e; f32__f; tmp_5; f32__g; 
-    tmp_7; f32__h; tmp_9; f32__i; tmp_11; f32__j; f32__k; f32__l; tmp_15;
-    f32__m; f32__n; f32__o; f32__p; f32__q; tmp_21; f32__r; f32__s
+    __fc_errno; f32__x; tmp; tmp_0; f32__c; f32__d; f32__e; f32__f; tmp_5;
+    f32__g; tmp_7; f32__h; tmp_9; f32__i; tmp_11; f32__j; f32__k; f32__l;
+    tmp_15; f32__m; f32__n; f32__o; f32__p; f32__q; tmp_21; f32__r; f32__s
 [inout] Inputs for function test_powf_singleton_exp:
     nondet
 [inout] Out (internal) for function test_round:
@@ -3252,7 +2996,7 @@
 [inout] Inputs for function test_truncf_det:
     \nothing
 [inout] Out (internal) for function main:
-    __retres
+    __fc_errno; __retres
 [inout] Inputs for function main:
     nondet; any_double; any_float
 /* Generated by Frama-C */
diff --git a/tests/idct/oracle/ieee_1180_1990.res.oracle b/tests/idct/oracle/ieee_1180_1990.res.oracle
index 02d4b53e0b88d1de3344dd38408a5e06a4b952bc..236b5f91450558595cd5c4d24239700a18dbe80a 100644
--- a/tests/idct/oracle/ieee_1180_1990.res.oracle
+++ b/tests/idct/oracle/ieee_1180_1990.res.oracle
@@ -2418,10 +2418,13 @@
 [ Extern  ] Post-condition 'positive_result'
             ensures positive_result: \is_finite(\result) ∧ \result ≥ 0
             Unverifiable but considered Valid.
+[ Extern  ] Post-condition 'no_error'
+            ensures no_error: __fc_errno ≡ \old(__fc_errno)
+            Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 132)
+[ Extern  ] Froms (file share/libc/math.h, line 135)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -2435,10 +2438,13 @@
 [ Extern  ] Post-condition 'positive_result'
             ensures positive_result: \is_finite(\result) ∧ \result ≥ 0
             Unverifiable but considered Valid.
+[ Extern  ] Post-condition 'no_error'
+            ensures no_error: __fc_errno ≡ \old(__fc_errno)
+            Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 138)
+[ Extern  ] Froms (file share/libc/math.h, line 156)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -2452,10 +2458,13 @@
 [ Extern  ] Post-condition 'positive_result'
             ensures positive_result: \is_finite(\result) ∧ \result ≥ 0
             Unverifiable but considered Valid.
+[ Extern  ] Post-condition 'no_error'
+            ensures no_error: __fc_errno ≡ \old(__fc_errno)
+            Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 144)
+[ Extern  ] Froms (file share/libc/math.h, line 177)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -2469,10 +2478,13 @@
 [ Extern  ] Post-condition 'finite_result'
             ensures finite_result: \is_finite(\result)
             Unverifiable but considered Valid.
+[ Extern  ] Post-condition 'no_error'
+            ensures no_error: __fc_errno ≡ \old(__fc_errno)
+            Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 150)
+[ Extern  ] Froms (file share/libc/math.h, line 198)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -2486,10 +2498,13 @@
 [ Extern  ] Post-condition 'finite_result'
             ensures finite_result: \is_finite(\result)
             Unverifiable but considered Valid.
+[ Extern  ] Post-condition 'no_error'
+            ensures no_error: __fc_errno ≡ \old(__fc_errno)
+            Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 156)
+[ Extern  ] Froms (file share/libc/math.h, line 219)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -2503,10 +2518,13 @@
 [ Extern  ] Post-condition 'finite_result'
             ensures finite_result: \is_finite(\result)
             Unverifiable but considered Valid.
+[ Extern  ] Post-condition 'no_error'
+            ensures no_error: __fc_errno ≡ \old(__fc_errno)
+            Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 162)
+[ Extern  ] Froms (file share/libc/math.h, line 240)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -2526,7 +2544,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 168)
+[ Extern  ] Froms (file share/libc/math.h, line 258)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -2546,7 +2564,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 175)
+[ Extern  ] Froms (file share/libc/math.h, line 272)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -2566,7 +2584,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 182)
+[ Extern  ] Froms (file share/libc/math.h, line 286)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -2583,7 +2601,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 190)
+[ Extern  ] Froms (file share/libc/math.h, line 300)
             assigns \result \from x, y;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -2600,7 +2618,24 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 197)
+[ Extern  ] Froms (file share/libc/math.h, line 313)
+            assigns \result \from x, y;
+            Unverifiable but considered Valid.
+[  Valid  ] Default behavior
+            default behavior
+            by Frama-C kernel.
+
+--------------------------------------------------------------------------------
+--- Properties of Function 'atan2l'
+--------------------------------------------------------------------------------
+
+[ Extern  ] Post-condition 'finite_result'
+            ensures finite_result: \is_finite(\result)
+            Unverifiable but considered Valid.
+[ Extern  ] Assigns nothing
+            assigns \nothing;
+            Unverifiable but considered Valid.
+[ Extern  ] Froms (file share/libc/math.h, line 326)
             assigns \result \from x, y;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -2620,10 +2655,13 @@
 [ Extern  ] Post-condition 'result_domain'
             ensures result_domain: -1. ≤ \result ≤ 1.
             Unverifiable but considered Valid.
+[ Extern  ] Post-condition 'no_error'
+            ensures no_error: __fc_errno ≡ \old(__fc_errno)
+            Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 205)
+[ Extern  ] Froms (file share/libc/math.h, line 342)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -2640,10 +2678,13 @@
 [ Extern  ] Post-condition 'result_domain'
             ensures result_domain: -1. ≤ \result ≤ 1.
             Unverifiable but considered Valid.
+[ Extern  ] Post-condition 'no_error'
+            ensures no_error: __fc_errno ≡ \old(__fc_errno)
+            Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 212)
+[ Extern  ] Froms (file share/libc/math.h, line 364)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -2660,10 +2701,13 @@
 [ Extern  ] Post-condition 'result_domain'
             ensures result_domain: -1. ≤ \result ≤ 1.
             Unverifiable but considered Valid.
+[ Extern  ] Post-condition 'no_error'
+            ensures no_error: __fc_errno ≡ \old(__fc_errno)
+            Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 219)
+[ Extern  ] Froms (file share/libc/math.h, line 386)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -2680,10 +2724,13 @@
 [ Extern  ] Post-condition 'result_domain'
             ensures result_domain: -1. ≤ \result ≤ 1.
             Unverifiable but considered Valid.
+[ Extern  ] Post-condition 'no_error'
+            ensures no_error: __fc_errno ≡ \old(__fc_errno)
+            Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 226)
+[ Extern  ] Froms (file share/libc/math.h, line 408)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -2700,10 +2747,13 @@
 [ Extern  ] Post-condition 'result_domain'
             ensures result_domain: -1. ≤ \result ≤ 1.
             Unverifiable but considered Valid.
+[ Extern  ] Post-condition 'no_error'
+            ensures no_error: __fc_errno ≡ \old(__fc_errno)
+            Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 233)
+[ Extern  ] Froms (file share/libc/math.h, line 430)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -2720,10 +2770,13 @@
 [ Extern  ] Post-condition 'result_domain'
             ensures result_domain: -1. ≤ \result ≤ 1.
             Unverifiable but considered Valid.
+[ Extern  ] Post-condition 'no_error'
+            ensures no_error: __fc_errno ≡ \old(__fc_errno)
+            Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 240)
+[ Extern  ] Froms (file share/libc/math.h, line 452)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -2734,208 +2787,178 @@
 --- Properties of Function 'acosh'
 --------------------------------------------------------------------------------
 
-[ Extern  ] Post-condition for 'normal' 'positive_result'
+[ Extern  ] Post-condition 'positive_result'
             ensures positive_result: \is_finite(\result) ∧ \result ≥ 0
             Unverifiable but considered Valid.
-[ Extern  ] Post-condition for 'infinite' 'result_plus_infinity'
-            ensures result_plus_infinity: \is_plus_infinity(\result)
+[ Extern  ] Post-condition 'no_error'
+            ensures no_error: __fc_errno ≡ \old(__fc_errno)
             Unverifiable but considered Valid.
-[ Extern  ] Post-condition for 'domain_error' 'errno_set'
-            ensures errno_set: __fc_errno ≡ 1
+[ Extern  ] Assigns nothing
+            assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Assigns (file share/libc/math.h, line 251)
-            assigns __fc_errno, \result;
+[ Extern  ] Froms (file share/libc/math.h, line 478)
+            assigns \result \from x;
             Unverifiable but considered Valid.
-[ Extern  ] Assigns for 'domain_error' (file share/libc/math.h, line 262)
-            assigns __fc_errno, \result;
+[  Valid  ] Default behavior
+            default behavior
+            by Frama-C kernel.
+
+--------------------------------------------------------------------------------
+--- Properties of Function 'acoshf'
+--------------------------------------------------------------------------------
+
+[ Extern  ] Post-condition 'positive_result'
+            ensures positive_result: \is_finite(\result) ∧ \result ≥ 0
             Unverifiable but considered Valid.
-[ Extern  ] Assigns for 'infinite' nothing
-            assigns \nothing;
+[ Extern  ] Post-condition 'no_error'
+            ensures no_error: __fc_errno ≡ \old(__fc_errno)
             Unverifiable but considered Valid.
-[ Extern  ] Assigns for 'normal' nothing
+[ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 251)
-            assigns __fc_errno \from x;
-            Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 251)
+[ Extern  ] Froms (file share/libc/math.h, line 504)
             assigns \result \from x;
             Unverifiable but considered Valid.
-[ Extern  ] Froms for 'domain_error' (file share/libc/math.h, line 262)
-            assigns __fc_errno \from x;
+[  Valid  ] Default behavior
+            default behavior
+            by Frama-C kernel.
+
+--------------------------------------------------------------------------------
+--- Properties of Function 'acoshl'
+--------------------------------------------------------------------------------
+
+[ Extern  ] Post-condition 'positive_result'
+            ensures positive_result: \is_finite(\result) ∧ \result ≥ 0
             Unverifiable but considered Valid.
-[ Extern  ] Froms for 'domain_error' (file share/libc/math.h, line 262)
-            assigns \result \from x;
+[ Extern  ] Post-condition 'no_error'
+            ensures no_error: __fc_errno ≡ \old(__fc_errno)
             Unverifiable but considered Valid.
-[ Extern  ] Froms for 'infinite' (file share/libc/math.h, line 258)
-            assigns \result \from x;
+[ Extern  ] Assigns nothing
+            assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms for 'normal' (file share/libc/math.h, line 254)
+[ Extern  ] Froms (file share/libc/math.h, line 530)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
             default behavior
             by Frama-C kernel.
-[  Valid  ] Behavior 'domain_error'
-            behavior domain_error
-            by Frama-C kernel.
-[  Valid  ] Behavior 'infinite'
-            behavior infinite
-            by Frama-C kernel.
-[  Valid  ] Behavior 'normal'
-            behavior normal
-            by Frama-C kernel.
 
 --------------------------------------------------------------------------------
---- Properties of Function 'acoshf'
+--- Properties of Function 'exp'
 --------------------------------------------------------------------------------
 
+[ Extern  ] Post-condition for 'normal' 'res_finite'
+            ensures res_finite: \is_finite(\result)
+            Unverifiable but considered Valid.
 [ Extern  ] Post-condition for 'normal' 'positive_result'
-            ensures positive_result: \is_finite(\result) ∧ \result ≥ 0
+            ensures positive_result: \result > 0.
             Unverifiable but considered Valid.
-[ Extern  ] Post-condition for 'infinite' 'result_plus_infinity'
-            ensures result_plus_infinity: \is_plus_infinity(\result)
+[ Extern  ] Post-condition for 'normal' 'no_error'
+            ensures no_error: __fc_errno ≡ \old(__fc_errno)
             Unverifiable but considered Valid.
-[ Extern  ] Post-condition for 'domain_error' 'errno_set'
-            ensures errno_set: __fc_errno ≡ 1
+[ Extern  ] Post-condition for 'underflow' 'zero_res'
+            ensures zero_res: \result ≡ 0.
             Unverifiable but considered Valid.
-[ Extern  ] Assigns (file share/libc/math.h, line 269)
-            assigns __fc_errno, \result;
+[ Extern  ] Post-condition for 'underflow' 'errno_set'
+            ensures errno_set: __fc_errno ≡ 34
+            Unverifiable but considered Valid.
+[ Extern  ] Post-condition for 'minus_infinity' 'zero_result'
+            ensures zero_result: \is_finite(\result) ∧ \result ≡ 0.
+            Unverifiable but considered Valid.
+[ Extern  ] Post-condition for 'minus_infinity' 'no_error'
+            ensures no_error: __fc_errno ≡ \old(__fc_errno)
             Unverifiable but considered Valid.
-[ Extern  ] Assigns for 'domain_error' (file share/libc/math.h, line 280)
+[ Extern  ] Assigns (file share/libc/math.h, line 573)
             assigns __fc_errno, \result;
             Unverifiable but considered Valid.
-[ Extern  ] Assigns for 'infinite' nothing
+[ Extern  ] Assigns for 'minus_infinity' nothing
             assigns \nothing;
             Unverifiable but considered Valid.
 [ Extern  ] Assigns for 'normal' nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 269)
+[ Extern  ] Froms (file share/libc/math.h, line 573)
             assigns __fc_errno \from x;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 269)
+[ Extern  ] Froms (file share/libc/math.h, line 573)
             assigns \result \from x;
             Unverifiable but considered Valid.
-[ Extern  ] Froms for 'domain_error' (file share/libc/math.h, line 280)
-            assigns __fc_errno \from x;
-            Unverifiable but considered Valid.
-[ Extern  ] Froms for 'domain_error' (file share/libc/math.h, line 280)
-            assigns \result \from x;
-            Unverifiable but considered Valid.
-[ Extern  ] Froms for 'infinite' (file share/libc/math.h, line 276)
+[ Extern  ] Froms for 'minus_infinity' (file share/libc/math.h, line 596)
             assigns \result \from x;
             Unverifiable but considered Valid.
-[ Extern  ] Froms for 'normal' (file share/libc/math.h, line 272)
+[ Extern  ] Froms for 'normal' (file share/libc/math.h, line 577)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
             default behavior
             by Frama-C kernel.
-[  Valid  ] Behavior 'domain_error'
-            behavior domain_error
-            by Frama-C kernel.
-[  Valid  ] Behavior 'infinite'
-            behavior infinite
+[  Valid  ] Behavior 'minus_infinity'
+            behavior minus_infinity
             by Frama-C kernel.
 [  Valid  ] Behavior 'normal'
             behavior normal
             by Frama-C kernel.
+[  Valid  ] Behavior 'underflow'
+            behavior underflow
+            by Frama-C kernel.
 
 --------------------------------------------------------------------------------
---- Properties of Function 'acoshl'
+--- Properties of Function 'expf'
 --------------------------------------------------------------------------------
 
+[ Extern  ] Post-condition for 'normal' 'res_finite'
+            ensures res_finite: \is_finite(\result)
+            Unverifiable but considered Valid.
 [ Extern  ] Post-condition for 'normal' 'positive_result'
-            ensures positive_result: \is_finite(\result) ∧ \result ≥ 0
+            ensures positive_result: \result > 0.
             Unverifiable but considered Valid.
-[ Extern  ] Post-condition for 'infinite' 'result_plus_infinity'
-            ensures result_plus_infinity: \is_plus_infinity(\result)
+[ Extern  ] Post-condition for 'normal' 'no_error'
+            ensures no_error: __fc_errno ≡ \old(__fc_errno)
             Unverifiable but considered Valid.
-[ Extern  ] Post-condition for 'domain_error' 'errno_set'
-            ensures errno_set: __fc_errno ≡ 1
+[ Extern  ] Post-condition for 'underflow' 'zero_res'
+            ensures zero_res: \result ≡ 0.
             Unverifiable but considered Valid.
-[ Extern  ] Assigns (file share/libc/math.h, line 287)
-            assigns __fc_errno, \result;
+[ Extern  ] Post-condition for 'underflow' 'errno_set'
+            ensures errno_set: __fc_errno ≡ 34
+            Unverifiable but considered Valid.
+[ Extern  ] Post-condition for 'minus_infinity' 'zero_result'
+            ensures zero_result: \is_finite(\result) ∧ \result ≡ 0.
             Unverifiable but considered Valid.
-[ Extern  ] Assigns for 'domain_error' (file share/libc/math.h, line 298)
+[ Extern  ] Post-condition for 'minus_infinity' 'no_error'
+            ensures no_error: __fc_errno ≡ \old(__fc_errno)
+            Unverifiable but considered Valid.
+[ Extern  ] Assigns (file share/libc/math.h, line 610)
             assigns __fc_errno, \result;
             Unverifiable but considered Valid.
-[ Extern  ] Assigns for 'infinite' nothing
+[ Extern  ] Assigns for 'minus_infinity' nothing
             assigns \nothing;
             Unverifiable but considered Valid.
 [ Extern  ] Assigns for 'normal' nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 287)
+[ Extern  ] Froms (file share/libc/math.h, line 610)
             assigns __fc_errno \from x;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 287)
+[ Extern  ] Froms (file share/libc/math.h, line 610)
             assigns \result \from x;
             Unverifiable but considered Valid.
-[ Extern  ] Froms for 'domain_error' (file share/libc/math.h, line 298)
-            assigns __fc_errno \from x;
-            Unverifiable but considered Valid.
-[ Extern  ] Froms for 'domain_error' (file share/libc/math.h, line 298)
+[ Extern  ] Froms for 'minus_infinity' (file share/libc/math.h, line 633)
             assigns \result \from x;
             Unverifiable but considered Valid.
-[ Extern  ] Froms for 'infinite' (file share/libc/math.h, line 294)
-            assigns \result \from x;
-            Unverifiable but considered Valid.
-[ Extern  ] Froms for 'normal' (file share/libc/math.h, line 290)
+[ Extern  ] Froms for 'normal' (file share/libc/math.h, line 614)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
             default behavior
             by Frama-C kernel.
-[  Valid  ] Behavior 'domain_error'
-            behavior domain_error
-            by Frama-C kernel.
-[  Valid  ] Behavior 'infinite'
-            behavior infinite
+[  Valid  ] Behavior 'minus_infinity'
+            behavior minus_infinity
             by Frama-C kernel.
 [  Valid  ] Behavior 'normal'
             behavior normal
             by Frama-C kernel.
-
---------------------------------------------------------------------------------
---- Properties of Function 'exp'
---------------------------------------------------------------------------------
-
-[ Extern  ] Post-condition 'res_finite'
-            ensures res_finite: \is_finite(\result)
-            Unverifiable but considered Valid.
-[ Extern  ] Post-condition 'positive_result'
-            ensures positive_result: \result > 0.
-            Unverifiable but considered Valid.
-[ Extern  ] Assigns nothing
-            assigns \nothing;
-            Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 326)
-            assigns \result \from x;
-            Unverifiable but considered Valid.
-[  Valid  ] Default behavior
-            default behavior
-            by Frama-C kernel.
-
---------------------------------------------------------------------------------
---- Properties of Function 'expf'
---------------------------------------------------------------------------------
-
-[ Extern  ] Post-condition 'res_finite'
-            ensures res_finite: \is_finite(\result)
-            Unverifiable but considered Valid.
-[ Extern  ] Post-condition 'positive_result'
-            ensures positive_result: \result > 0.
-            Unverifiable but considered Valid.
-[ Extern  ] Assigns nothing
-            assigns \nothing;
-            Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 334)
-            assigns \result \from x;
-            Unverifiable but considered Valid.
-[  Valid  ] Default behavior
-            default behavior
+[  Valid  ] Behavior 'underflow'
+            behavior underflow
             by Frama-C kernel.
 
 --------------------------------------------------------------------------------
@@ -2945,10 +2968,13 @@
 [ Extern  ] Post-condition 'finite_result'
             ensures finite_result: \is_finite(\result)
             Unverifiable but considered Valid.
+[ Extern  ] Post-condition 'no_error'
+            ensures no_error: __fc_errno ≡ \old(__fc_errno)
+            Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 364)
+[ Extern  ] Froms (file share/libc/math.h, line 673)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -2962,10 +2988,13 @@
 [ Extern  ] Post-condition 'finite_result'
             ensures finite_result: \is_finite(\result)
             Unverifiable but considered Valid.
+[ Extern  ] Post-condition 'no_error'
+            ensures no_error: __fc_errno ≡ \old(__fc_errno)
+            Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 371)
+[ Extern  ] Froms (file share/libc/math.h, line 704)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -2979,10 +3008,13 @@
 [ Extern  ] Post-condition 'finite_result'
             ensures finite_result: \is_finite(\result)
             Unverifiable but considered Valid.
+[ Extern  ] Post-condition 'no_error'
+            ensures no_error: __fc_errno ≡ \old(__fc_errno)
+            Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 378)
+[ Extern  ] Froms (file share/libc/math.h, line 735)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -2996,10 +3028,13 @@
 [ Extern  ] Post-condition 'finite_result'
             ensures finite_result: \is_finite(\result)
             Unverifiable but considered Valid.
+[ Extern  ] Post-condition 'no_error'
+            ensures no_error: __fc_errno ≡ \old(__fc_errno)
+            Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 385)
+[ Extern  ] Froms (file share/libc/math.h, line 766)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3013,10 +3048,13 @@
 [ Extern  ] Post-condition 'finite_result'
             ensures finite_result: \is_finite(\result)
             Unverifiable but considered Valid.
+[ Extern  ] Post-condition 'no_error'
+            ensures no_error: __fc_errno ≡ \old(__fc_errno)
+            Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 392)
+[ Extern  ] Froms (file share/libc/math.h, line 797)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3030,10 +3068,13 @@
 [ Extern  ] Post-condition 'finite_result'
             ensures finite_result: \is_finite(\result)
             Unverifiable but considered Valid.
+[ Extern  ] Post-condition 'no_error'
+            ensures no_error: __fc_errno ≡ \old(__fc_errno)
+            Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 399)
+[ Extern  ] Froms (file share/libc/math.h, line 828)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3047,10 +3088,13 @@
 [ Extern  ] Post-condition 'finite_result'
             ensures finite_result: \is_finite(\result)
             Unverifiable but considered Valid.
+[ Extern  ] Post-condition 'no_error'
+            ensures no_error: __fc_errno ≡ \old(__fc_errno)
+            Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 410)
+[ Extern  ] Froms (file share/libc/math.h, line 863)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3064,10 +3108,13 @@
 [ Extern  ] Post-condition 'finite_result'
             ensures finite_result: \is_finite(\result)
             Unverifiable but considered Valid.
+[ Extern  ] Post-condition 'no_error'
+            ensures no_error: __fc_errno ≡ \old(__fc_errno)
+            Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 417)
+[ Extern  ] Froms (file share/libc/math.h, line 894)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3081,10 +3128,13 @@
 [ Extern  ] Post-condition 'finite_result'
             ensures finite_result: \is_finite(\result)
             Unverifiable but considered Valid.
+[ Extern  ] Post-condition 'no_error'
+            ensures no_error: __fc_errno ≡ \old(__fc_errno)
+            Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 424)
+[ Extern  ] Froms (file share/libc/math.h, line 925)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3109,7 +3159,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 450)
+[ Extern  ] Froms (file share/libc/math.h, line 972)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3134,7 +3184,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 458)
+[ Extern  ] Froms (file share/libc/math.h, line 990)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3159,7 +3209,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 466)
+[ Extern  ] Froms (file share/libc/math.h, line 1008)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3173,10 +3223,17 @@
 [ Extern  ] Post-condition 'finite_result'
             ensures finite_result: \is_finite(\result)
             Unverifiable but considered Valid.
-[ Extern  ] Assigns nothing
-            assigns \nothing;
+[ Extern  ] Post-condition '__fc_errno'
+            ensures
+            __fc_errno: __fc_errno ≡ 34 ∨ __fc_errno ≡ \old(__fc_errno)
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 479)
+[ Extern  ] Assigns (file share/libc/math.h, line 1030)
+            assigns __fc_errno, \result;
+            Unverifiable but considered Valid.
+[ Extern  ] Froms (file share/libc/math.h, line 1030)
+            assigns __fc_errno \from x, y;
+            Unverifiable but considered Valid.
+[ Extern  ] Froms (file share/libc/math.h, line 1030)
             assigns \result \from x, y;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3190,10 +3247,17 @@
 [ Extern  ] Post-condition 'finite_result'
             ensures finite_result: \is_finite(\result)
             Unverifiable but considered Valid.
-[ Extern  ] Assigns nothing
-            assigns \nothing;
+[ Extern  ] Post-condition '__fc_errno'
+            ensures
+            __fc_errno: __fc_errno ≡ 34 ∨ __fc_errno ≡ \old(__fc_errno)
+            Unverifiable but considered Valid.
+[ Extern  ] Assigns (file share/libc/math.h, line 1045)
+            assigns __fc_errno, \result;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 486)
+[ Extern  ] Froms (file share/libc/math.h, line 1045)
+            assigns __fc_errno \from x, y;
+            Unverifiable but considered Valid.
+[ Extern  ] Froms (file share/libc/math.h, line 1045)
             assigns \result \from x, y;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3219,10 +3283,13 @@
 [ Extern  ] Post-condition 'result_value'
             ensures result_value: \result ≡ sqrt(\old(x))
             Unverifiable but considered Valid.
+[ Extern  ] Post-condition 'no_error'
+            ensures no_error: __fc_errno ≡ \old(__fc_errno)
+            Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 495)
+[ Extern  ] Froms (file share/libc/math.h, line 1066)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3240,12 +3307,15 @@
             ensures positive_result: \result ≥ -0.
             Unverifiable but considered Valid.
 [ Extern  ] Post-condition 'result_value'
-            ensures result_value: \result ≡ sqrtf(\old(x))
+            ensures result_value: \result ≡ sqrt((double)\old(x))
+            Unverifiable but considered Valid.
+[ Extern  ] Post-condition 'no_error'
+            ensures no_error: __fc_errno ≡ \old(__fc_errno)
             Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 504)
+[ Extern  ] Froms (file share/libc/math.h, line 1095)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3262,10 +3332,13 @@
 [ Extern  ] Post-condition 'positive_result'
             ensures positive_result: \result ≥ -0.
             Unverifiable but considered Valid.
+[ Extern  ] Post-condition 'no_error'
+            ensures no_error: __fc_errno ≡ \old(__fc_errno)
+            Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 513)
+[ Extern  ] Froms (file share/libc/math.h, line 1124)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3282,7 +3355,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 536)
+[ Extern  ] Froms (file share/libc/math.h, line 1164)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3299,7 +3372,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 542)
+[ Extern  ] Froms (file share/libc/math.h, line 1181)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3316,7 +3389,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 549)
+[ Extern  ] Froms (file share/libc/math.h, line 1198)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3333,7 +3406,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 555)
+[ Extern  ] Froms (file share/libc/math.h, line 1215)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3350,7 +3423,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 561)
+[ Extern  ] Froms (file share/libc/math.h, line 1232)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3367,7 +3440,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 567)
+[ Extern  ] Froms (file share/libc/math.h, line 1249)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3384,7 +3457,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 589)
+[ Extern  ] Froms (file share/libc/math.h, line 1282)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3401,7 +3474,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 595)
+[ Extern  ] Froms (file share/libc/math.h, line 1299)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3418,7 +3491,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 601)
+[ Extern  ] Froms (file share/libc/math.h, line 1316)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3435,7 +3508,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 615)
+[ Extern  ] Froms (file share/libc/math.h, line 1341)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3452,7 +3525,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 621)
+[ Extern  ] Froms (file share/libc/math.h, line 1358)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3469,7 +3542,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 627)
+[ Extern  ] Froms (file share/libc/math.h, line 1375)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3483,10 +3556,13 @@
 [ Extern  ] Post-condition 'finite_result'
             ensures finite_result: \is_finite(\result)
             Unverifiable but considered Valid.
+[ Extern  ] Post-condition 'no_error'
+            ensures no_error: __fc_errno ≡ \old(__fc_errno)
+            Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 634)
+[ Extern  ] Froms (file share/libc/math.h, line 1395)
             assigns \result \from x, y;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3500,10 +3576,13 @@
 [ Extern  ] Post-condition 'finite_result'
             ensures finite_result: \is_finite(\result)
             Unverifiable but considered Valid.
+[ Extern  ] Post-condition 'no_error'
+            ensures no_error: __fc_errno ≡ \old(__fc_errno)
+            Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 641)
+[ Extern  ] Froms (file share/libc/math.h, line 1416)
             assigns \result \from x, y;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3520,7 +3599,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 662)
+[ Extern  ] Froms (file share/libc/math.h, line 1449)
             assigns \result \from (indirect: *(tagp + (0 ..)));
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3537,7 +3616,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 669)
+[ Extern  ] Froms (file share/libc/math.h, line 1456)
             assigns \result \from (indirect: *(tagp + (0 ..)));
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3554,7 +3633,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 676)
+[ Extern  ] Froms (file share/libc/math.h, line 1463)
             assigns \result \from (indirect: *(tagp + (0 ..)));
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3574,7 +3653,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 706)
+[ Extern  ] Froms (file share/libc/math.h, line 1493)
             assigns \result \from f;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3600,7 +3679,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 719)
+[ Extern  ] Froms (file share/libc/math.h, line 1506)
             assigns \result \from d;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3623,7 +3702,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 746)
+[ Extern  ] Froms (file share/libc/math.h, line 1533)
             assigns \result \from \nothing;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3640,7 +3719,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 752)
+[ Extern  ] Froms (file share/libc/math.h, line 1539)
             assigns \result \from \nothing;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -4002,9 +4081,9 @@
 --------------------------------------------------------------------------------
 --- Status Report Summary
 --------------------------------------------------------------------------------
-   175 Completely validated
+   173 Completely validated
     16 Locally validated
-   462 Considered valid
+   488 Considered valid
     56 To be validated
-   709 Total
+   733 Total
 --------------------------------------------------------------------------------
diff --git a/tests/libc/oracle/fc_libc.0.res.oracle b/tests/libc/oracle/fc_libc.0.res.oracle
index 5ba9d6cd179e271e66d7029f2bbe88fa4b466efe..78e6ae2ca53e3ceb5a196176ee438cf604d5cd7e 100644
--- a/tests/libc/oracle/fc_libc.0.res.oracle
+++ b/tests/libc/oracle/fc_libc.0.res.oracle
@@ -1,4 +1,5 @@
 [kernel] Parsing tests/libc/fc_libc.c (with preprocessing)
+[kernel] :0: Warning: unnamed requires
 [kernel] share/libc/sys/socket.h:451: Warning: 
   clause with '\initialized' must contain name 'initialization'
 [eva] Analyzing a complete application starting at main
@@ -43,7 +44,7 @@
    wcscpy (0 call); wcsdup (0 call); wcslen (3 calls); wcsncat (0 call);
    wcsncpy (0 call); wmemcpy (1 call); wmemset (0 call); 
   
-  Specified-only functions (414)
+  Specified-only functions (415)
   ==============================
    FD_CLR (0 call); FD_ISSET (0 call); FD_SET (0 call); FD_ZERO (0 call);
    Frama_C_int_interval (0 call); Frama_C_long_interval (0 call);
@@ -77,10 +78,10 @@
    acoshf (0 call); acoshl (0 call); acosl (0 call); alloca (0 call);
    asctime (0 call); asin (0 call); asinf (0 call); asinl (0 call);
    at_quick_exit (0 call); atan (0 call); atan2 (0 call); atan2f (0 call);
-   atanf (0 call); atanl (0 call); atexit (0 call); atof (0 call);
-   atol (0 call); atoll (0 call); basename (0 call); bind (0 call);
-   bsearch (0 call); bzero (0 call); ceil (0 call); ceilf (0 call);
-   ceill (0 call); cfgetispeed (0 call); cfgetospeed (0 call);
+   atan2l (0 call); atanf (0 call); atanl (0 call); atexit (0 call);
+   atof (0 call); atol (0 call); atoll (0 call); basename (0 call);
+   bind (0 call); bsearch (0 call); bzero (0 call); ceil (0 call);
+   ceilf (0 call); ceill (0 call); cfgetispeed (0 call); cfgetospeed (0 call);
    cfsetispeed (0 call); cfsetospeed (0 call); chdir (0 call); chown (0 call);
    chroot (0 call); clearerr (0 call); clearerr_unlocked (0 call);
    clock (0 call); clock_gettime (0 call); clock_nanosleep (0 call);
@@ -195,7 +196,7 @@
   Goto = 98
   Assignment = 465
   Exit point = 84
-  Function = 499
+  Function = 500
   Function call = 96
   Pointer dereferencing = 159
   Cyclomatic complexity = 298
diff --git a/tests/libc/oracle/fc_libc.1.res.oracle b/tests/libc/oracle/fc_libc.1.res.oracle
index fd785f066330f5aec494ac26657707f3754da401..8390d1842cfd8015387e9f05d813f988f2e0609b 100644
--- a/tests/libc/oracle/fc_libc.1.res.oracle
+++ b/tests/libc/oracle/fc_libc.1.res.oracle
@@ -2841,6 +2841,7 @@ int __fc_fpclassify(double x);
 
 /*@ requires in_domain: \is_finite(x) ∧ \abs(x) ≤ 1;
     ensures positive_result: \is_finite(\result) ∧ \result ≥ 0;
+    ensures no_error: __fc_errno ≡ \old(__fc_errno);
     assigns \result;
     assigns \result \from x;
  */
@@ -2848,6 +2849,7 @@ extern double acos(double x);
 
 /*@ requires in_domain: \is_finite(x) ∧ \abs(x) ≤ 1;
     ensures positive_result: \is_finite(\result) ∧ \result ≥ 0;
+    ensures no_error: __fc_errno ≡ \old(__fc_errno);
     assigns \result;
     assigns \result \from x;
  */
@@ -2855,6 +2857,7 @@ extern float acosf(float x);
 
 /*@ requires in_domain: \is_finite(x) ∧ \abs(x) ≤ 1;
     ensures positive_result: \is_finite(\result) ∧ \result ≥ 0;
+    ensures no_error: __fc_errno ≡ \old(__fc_errno);
     assigns \result;
     assigns \result \from x;
  */
@@ -2862,6 +2865,7 @@ extern long double acosl(long double x);
 
 /*@ requires in_domain: \is_finite(x) ∧ \abs(x) ≤ 1;
     ensures finite_result: \is_finite(\result);
+    ensures no_error: __fc_errno ≡ \old(__fc_errno);
     assigns \result;
     assigns \result \from x;
  */
@@ -2869,6 +2873,7 @@ extern double asin(double x);
 
 /*@ requires in_domain: \is_finite(x) ∧ \abs(x) ≤ 1;
     ensures finite_result: \is_finite(\result);
+    ensures no_error: __fc_errno ≡ \old(__fc_errno);
     assigns \result;
     assigns \result \from x;
  */
@@ -2876,12 +2881,13 @@ extern float asinf(float x);
 
 /*@ requires in_domain: \is_finite(x) ∧ \abs(x) ≤ 1;
     ensures finite_result: \is_finite(\result);
+    ensures no_error: __fc_errno ≡ \old(__fc_errno);
     assigns \result;
     assigns \result \from x;
  */
 extern long double asinl(long double x);
 
-/*@ requires finite_arg: \is_finite(x);
+/*@ requires finite_arg: ¬\is_NaN(x);
     ensures finite_result: \is_finite(\result);
     ensures result_domain: -1.571 ≤ \result ≤ 1.571;
     assigns \result;
@@ -2889,7 +2895,7 @@ extern long double asinl(long double x);
  */
 extern float atanf(float x);
 
-/*@ requires finite_arg: \is_finite(x);
+/*@ requires number_arg: ¬\is_NaN(x);
     ensures finite_result: \is_finite(\result);
     ensures result_domain: -1.571 ≤ \result ≤ 1.571;
     assigns \result;
@@ -2897,7 +2903,7 @@ extern float atanf(float x);
  */
 extern double atan(double x);
 
-/*@ requires finite_arg: \is_finite(x);
+/*@ requires number_arg: ¬\is_NaN(x);
     ensures finite_result: \is_finite(\result);
     ensures result_domain: -1.571 ≤ \result ≤ 1.571;
     assigns \result;
@@ -2905,25 +2911,31 @@ extern double atan(double x);
  */
 extern long double atanl(long double x);
 
-/*@ requires finite_args: \is_finite(x) ∧ \is_finite(y);
-    requires finite_result: \is_finite(atan2(x, y));
+/*@ requires number_args: ¬\is_NaN(x) ∧ ¬\is_NaN(y);
     ensures finite_result: \is_finite(\result);
     assigns \result;
     assigns \result \from x, y;
  */
 extern double atan2(double y, double x);
 
-/*@ requires finite_args: \is_finite(x) ∧ \is_finite(y);
-    requires finite_logic_result: \is_finite(atan2f(x, y));
+/*@ requires number_args: ¬\is_NaN(x) ∧ ¬\is_NaN(y);
     ensures finite_result: \is_finite(\result);
     assigns \result;
     assigns \result \from x, y;
  */
 extern float atan2f(float y, float x);
 
+/*@ requires number_args: ¬\is_NaN(x) ∧ ¬\is_NaN(y);
+    ensures finite_result: \is_finite(\result);
+    assigns \result;
+    assigns \result \from x, y;
+ */
+extern long double atan2l(long double y, long double x);
+
 /*@ requires finite_arg: \is_finite(x);
     ensures finite_result: \is_finite(\result);
     ensures result_domain: -1. ≤ \result ≤ 1.;
+    ensures no_error: __fc_errno ≡ \old(__fc_errno);
     assigns \result;
     assigns \result \from x;
  */
@@ -2932,6 +2944,7 @@ extern double cos(double x);
 /*@ requires finite_arg: \is_finite(x);
     ensures finite_result: \is_finite(\result);
     ensures result_domain: -1. ≤ \result ≤ 1.;
+    ensures no_error: __fc_errno ≡ \old(__fc_errno);
     assigns \result;
     assigns \result \from x;
  */
@@ -2940,6 +2953,7 @@ extern float cosf(float x);
 /*@ requires finite_arg: \is_finite(x);
     ensures finite_result: \is_finite(\result);
     ensures result_domain: -1. ≤ \result ≤ 1.;
+    ensures no_error: __fc_errno ≡ \old(__fc_errno);
     assigns \result;
     assigns \result \from x;
  */
@@ -2948,6 +2962,7 @@ extern long double cosl(long double x);
 /*@ requires finite_arg: \is_finite(x);
     ensures finite_result: \is_finite(\result);
     ensures result_domain: -1. ≤ \result ≤ 1.;
+    ensures no_error: __fc_errno ≡ \old(__fc_errno);
     assigns \result;
     assigns \result \from x;
  */
@@ -2956,6 +2971,7 @@ extern double sin(double x);
 /*@ requires finite_arg: \is_finite(x);
     ensures finite_result: \is_finite(\result);
     ensures result_domain: -1. ≤ \result ≤ 1.;
+    ensures no_error: __fc_errno ≡ \old(__fc_errno);
     assigns \result;
     assigns \result \from x;
  */
@@ -2964,116 +2980,107 @@ extern float sinf(float x);
 /*@ requires finite_arg: \is_finite(x);
     ensures finite_result: \is_finite(\result);
     ensures result_domain: -1. ≤ \result ≤ 1.;
+    ensures no_error: __fc_errno ≡ \old(__fc_errno);
     assigns \result;
     assigns \result \from x;
  */
 extern long double sinl(long double x);
 
-/*@ assigns __fc_errno, \result;
-    assigns __fc_errno \from x;
+/*@ requires in_domain: \is_finite(x) ∧ x ≥ 1;
+    ensures positive_result: \is_finite(\result) ∧ \result ≥ 0;
+    ensures no_error: __fc_errno ≡ \old(__fc_errno);
+    assigns \result;
     assigns \result \from x;
-    
-    behavior normal:
-      assumes in_domain: \is_finite(x) ∧ x ≥ 1;
-      ensures positive_result: \is_finite(\result) ∧ \result ≥ 0;
-      assigns \result;
-      assigns \result \from x;
-    
-    behavior infinite:
-      assumes is_plus_infinity: \is_plus_infinity(x);
-      ensures result_plus_infinity: \is_plus_infinity(\result);
-      assigns \result;
-      assigns \result \from x;
-    
-    behavior domain_error:
-      assumes
-        out_of_domain: \is_minus_infinity(x) ∨ (\is_finite(x) ∧ x < 1);
-      ensures errno_set: __fc_errno ≡ 1;
-      assigns __fc_errno, \result;
-      assigns __fc_errno \from x;
-      assigns \result \from x;
-    
-    disjoint behaviors domain_error, infinite, normal;
  */
 extern double acosh(double x);
 
-/*@ assigns __fc_errno, \result;
+/*@ requires in_domain: \is_finite(x) ∧ x ≥ 1;
+    ensures positive_result: \is_finite(\result) ∧ \result ≥ 0;
+    ensures no_error: __fc_errno ≡ \old(__fc_errno);
+    assigns \result;
+    assigns \result \from x;
+ */
+extern float acoshf(float x);
+
+/*@ requires in_domain: \is_finite(x) ∧ x ≥ 1;
+    ensures positive_result: \is_finite(\result) ∧ \result ≥ 0;
+    ensures no_error: __fc_errno ≡ \old(__fc_errno);
+    assigns \result;
+    assigns \result \from x;
+ */
+extern long double acoshl(long double x);
+
+/*@ requires ¬(overflow_arg: \is_finite(x) ∧ x > 0x1.62e42fefa39efp+9);
+    requires ¬(plus_infinity_arg: \is_plus_infinity(x));
+    requires ¬(nan_arg: \is_NaN(x));
+    assigns __fc_errno, \result;
     assigns __fc_errno \from x;
     assigns \result \from x;
     
     behavior normal:
-      assumes in_domain: \is_finite(x) ∧ x ≥ 1;
-      ensures positive_result: \is_finite(\result) ∧ \result ≥ 0;
+      assumes finite_arg: \is_finite(x);
+      assumes
+        domain_arg: x ≥ -0x1.74910d52d3051p9 ∧ x ≤ 0x1.62e42fefa39efp+9;
+      ensures res_finite: \is_finite(\result);
+      ensures positive_result: \result > 0.;
+      ensures no_error: __fc_errno ≡ \old(__fc_errno);
       assigns \result;
       assigns \result \from x;
     
-    behavior infinite:
-      assumes is_plus_infinity: \is_plus_infinity(x);
-      ensures result_plus_infinity: \is_plus_infinity(\result);
-      assigns \result;
-      assigns \result \from x;
+    behavior underflow:
+      assumes underflow_arg: \is_finite(x) ∧ x < -0x1.74910d52d3051p9;
+      ensures zero_res: \result ≡ 0.;
+      ensures errno_set: __fc_errno ≡ 34;
     
-    behavior domain_error:
-      assumes
-        out_of_domain: \is_minus_infinity(x) ∨ (\is_finite(x) ∧ x < 1);
-      ensures errno_set: __fc_errno ≡ 1;
-      assigns __fc_errno, \result;
-      assigns __fc_errno \from x;
+    behavior minus_infinity:
+      assumes plus_infinity_arg: \is_minus_infinity(x);
+      ensures zero_result: \is_finite(\result) ∧ \result ≡ 0.;
+      ensures no_error: __fc_errno ≡ \old(__fc_errno);
+      assigns \result;
       assigns \result \from x;
     
-    disjoint behaviors domain_error, infinite, normal;
+    complete behaviors minus_infinity, underflow, normal;
+    disjoint behaviors minus_infinity, underflow, normal;
  */
-extern float acoshf(float x);
+extern double exp(double x);
 
-/*@ assigns __fc_errno, \result;
+/*@ requires ¬(overflow_arg: \is_finite(x) ∧ x > 0x1.62e42ep+6);
+    requires ¬(plus_infinity_arg: \is_plus_infinity(x));
+    requires ¬(nan_arg: \is_NaN(x));
+    assigns __fc_errno, \result;
     assigns __fc_errno \from x;
     assigns \result \from x;
     
     behavior normal:
-      assumes in_domain: \is_finite(x) ∧ x ≥ 1;
-      ensures positive_result: \is_finite(\result) ∧ \result ≥ 0;
+      assumes finite_arg: \is_finite(x);
+      assumes domain_arg: x ≥ -0x1.9fe368p6 ∧ x ≤ 0x1.62e42ep+6;
+      ensures res_finite: \is_finite(\result);
+      ensures positive_result: \result > 0.;
+      ensures no_error: __fc_errno ≡ \old(__fc_errno);
       assigns \result;
       assigns \result \from x;
     
-    behavior infinite:
-      assumes is_plus_infinity: \is_plus_infinity(x);
-      ensures result_plus_infinity: \is_plus_infinity(\result);
-      assigns \result;
-      assigns \result \from x;
+    behavior underflow:
+      assumes underflow_arg: \is_finite(x) ∧ x < -0x1.9fe368p6;
+      ensures zero_res: \result ≡ 0.;
+      ensures errno_set: __fc_errno ≡ 34;
     
-    behavior domain_error:
-      assumes
-        out_of_domain: \is_minus_infinity(x) ∨ (\is_finite(x) ∧ x < 1);
-      ensures errno_set: __fc_errno ≡ 1;
-      assigns __fc_errno, \result;
-      assigns __fc_errno \from x;
+    behavior minus_infinity:
+      assumes plus_infinity_arg: \is_minus_infinity(x);
+      ensures zero_result: \is_finite(\result) ∧ \result ≡ 0.;
+      ensures no_error: __fc_errno ≡ \old(__fc_errno);
+      assigns \result;
       assigns \result \from x;
     
-    disjoint behaviors domain_error, infinite, normal;
- */
-extern long double acoshl(long double x);
-
-/*@ requires finite_arg: \is_finite(x);
-    requires finite_domain: x ≤ 0x1.62e42fefa39efp+9;
-    ensures res_finite: \is_finite(\result);
-    ensures positive_result: \result > 0.;
-    assigns \result;
-    assigns \result \from x;
- */
-extern double exp(double x);
-
-/*@ requires finite_arg: \is_finite(x);
-    requires res_finite: x ≤ 0x1.62e42ep+6;
-    ensures res_finite: \is_finite(\result);
-    ensures positive_result: \result > 0.;
-    assigns \result;
-    assigns \result \from x;
+    complete behaviors minus_infinity, underflow, normal;
+    disjoint behaviors minus_infinity, underflow, normal;
  */
 extern float expf(float x);
 
 /*@ requires finite_arg: \is_finite(x);
     requires arg_positive: x > 0;
     ensures finite_result: \is_finite(\result);
+    ensures no_error: __fc_errno ≡ \old(__fc_errno);
     assigns \result;
     assigns \result \from x;
  */
@@ -3082,14 +3089,16 @@ extern double log(double x);
 /*@ requires finite_arg: \is_finite(x);
     requires arg_positive: x > 0;
     ensures finite_result: \is_finite(\result);
+    ensures no_error: __fc_errno ≡ \old(__fc_errno);
     assigns \result;
     assigns \result \from x;
  */
 extern float logf(float x);
 
 /*@ requires finite_arg: \is_finite(x);
-    requires arg_pos: x > 0;
+    requires arg_positive: x > 0;
     ensures finite_result: \is_finite(\result);
+    ensures no_error: __fc_errno ≡ \old(__fc_errno);
     assigns \result;
     assigns \result \from x;
  */
@@ -3098,6 +3107,7 @@ extern long double logl(long double x);
 /*@ requires finite_arg: \is_finite(x);
     requires arg_positive: x > 0;
     ensures finite_result: \is_finite(\result);
+    ensures no_error: __fc_errno ≡ \old(__fc_errno);
     assigns \result;
     assigns \result \from x;
  */
@@ -3106,14 +3116,16 @@ extern double log10(double x);
 /*@ requires finite_arg: \is_finite(x);
     requires arg_positive: x > 0;
     ensures finite_result: \is_finite(\result);
+    ensures no_error: __fc_errno ≡ \old(__fc_errno);
     assigns \result;
     assigns \result \from x;
  */
 extern float log10f(float x);
 
 /*@ requires finite_arg: \is_finite(x);
-    requires arg_postive: x > 0;
+    requires arg_positive: x > 0;
     ensures finite_result: \is_finite(\result);
+    ensures no_error: __fc_errno ≡ \old(__fc_errno);
     assigns \result;
     assigns \result \from x;
  */
@@ -3122,6 +3134,7 @@ extern long double log10l(long double x);
 /*@ requires finite_arg: \is_finite(x);
     requires arg_positive: x > 0;
     ensures finite_result: \is_finite(\result);
+    ensures no_error: __fc_errno ≡ \old(__fc_errno);
     assigns \result;
     assigns \result \from x;
  */
@@ -3130,6 +3143,7 @@ extern double log2(double x);
 /*@ requires finite_arg: \is_finite(x);
     requires arg_positive: x > 0;
     ensures finite_result: \is_finite(\result);
+    ensures no_error: __fc_errno ≡ \old(__fc_errno);
     assigns \result;
     assigns \result \from x;
  */
@@ -3138,6 +3152,7 @@ extern float log2f(float x);
 /*@ requires finite_arg: \is_finite(x);
     requires arg_positive: x > 0;
     ensures finite_result: \is_finite(\result);
+    ensures no_error: __fc_errno ≡ \old(__fc_errno);
     assigns \result;
     assigns \result \from x;
  */
@@ -3157,18 +3172,22 @@ float fabsf(float x);
  */
 extern long double fabsl(long double x);
 
-/*@ requires finite_args: \is_finite(x) ∧ \is_finite(y);
-    requires finite_logic_res: \is_finite(pow(x, y));
+/*@ requires finite_logic_res: \is_finite(pow(x, y));
     ensures finite_result: \is_finite(\result);
-    assigns \result;
+    ensures
+      __fc_errno: __fc_errno ≡ 34 ∨ __fc_errno ≡ \old(__fc_errno);
+    assigns __fc_errno, \result;
+    assigns __fc_errno \from x, y;
     assigns \result \from x, y;
  */
 extern double pow(double x, double y);
 
-/*@ requires finite_args: \is_finite(x) ∧ \is_finite(y);
-    requires finite_logic_res: \is_finite(powf(x, y));
+/*@ requires finite_logic_res: \is_finite(pow((double)x, (double)y));
     ensures finite_result: \is_finite(\result);
-    assigns \result;
+    ensures
+      __fc_errno: __fc_errno ≡ 34 ∨ __fc_errno ≡ \old(__fc_errno);
+    assigns __fc_errno, \result;
+    assigns __fc_errno \from x, y;
     assigns \result \from x, y;
  */
 extern float powf(float x, float y);
@@ -3178,6 +3197,7 @@ extern float powf(float x, float y);
     ensures finite_result: \is_finite(\result);
     ensures positive_result: \result ≥ -0.;
     ensures result_value: \result ≡ sqrt(\old(x));
+    ensures no_error: __fc_errno ≡ \old(__fc_errno);
     assigns \result;
     assigns \result \from x;
  */
@@ -3187,7 +3207,8 @@ extern double sqrt(double x);
     requires arg_positive: x ≥ -0.;
     ensures finite_result: \is_finite(\result);
     ensures positive_result: \result ≥ -0.;
-    ensures result_value: \result ≡ sqrtf(\old(x));
+    ensures result_value: \result ≡ sqrt((double)\old(x));
+    ensures no_error: __fc_errno ≡ \old(__fc_errno);
     assigns \result;
     assigns \result \from x;
  */
@@ -3197,6 +3218,7 @@ extern float sqrtf(float x);
     requires arg_positive: x ≥ -0.;
     ensures finite_result: \is_finite(\result);
     ensures positive_result: \result ≥ -0.;
+    ensures no_error: __fc_errno ≡ \old(__fc_errno);
     assigns \result;
     assigns \result \from x;
  */
@@ -3286,17 +3308,17 @@ extern float truncf(float x);
  */
 extern long double truncl(long double x);
 
-/*@ requires finite_args: \is_finite(x) ∧ \is_finite(y);
-    requires finite_logic_result: \is_finite(fmod(x, y));
+/*@ requires in_domain: ¬\is_NaN(x) ∧ ¬\is_NaN(y) ∧ y ≢ 0.;
     ensures finite_result: \is_finite(\result);
+    ensures no_error: __fc_errno ≡ \old(__fc_errno);
     assigns \result;
     assigns \result \from x, y;
  */
 extern double fmod(double x, double y);
 
-/*@ requires finite_args: \is_finite(x) ∧ \is_finite(y);
-    requires finite_logic_result: \is_finite(fmodf(x, y));
+/*@ requires in_domain: ¬\is_NaN(x) ∧ ¬\is_NaN(y) ∧ y ≢ 0.;
     ensures finite_result: \is_finite(\result);
+    ensures no_error: __fc_errno ≡ \old(__fc_errno);
     assigns \result;
     assigns \result \from x, y;
  */
diff --git a/tests/libc/oracle/math_h.res.oracle b/tests/libc/oracle/math_h.res.oracle
index fa3503020a02b12db820f3c973b3e78ca640f169..3f3ed25684677cafeb46616a83e637e1f039b2d2 100644
--- a/tests/libc/oracle/math_h.res.oracle
+++ b/tests/libc/oracle/math_h.res.oracle
@@ -30,242 +30,215 @@
   fp_ilogb0 ∈ {-2147483648.}
   fp_ilogbnan ∈ {-2147483648.}
 [eva] tests/libc/math_h.c:45: Call to builtin atan
-[eva] tests/libc/math_h.c:45: 
-  function atan: precondition 'finite_arg' got status valid.
 [eva] tests/libc/math_h.c:45: Call to builtin atan
-[eva] tests/libc/math_h.c:45: 
-  function atan: precondition 'finite_arg' got status valid.
 [eva] tests/libc/math_h.c:45: Call to builtin atan
-[eva] tests/libc/math_h.c:45: 
-  function atan: precondition 'finite_arg' got status valid.
 [eva] tests/libc/math_h.c:45: Call to builtin atan
-[eva] tests/libc/math_h.c:45: 
-  function atan: precondition 'finite_arg' got status valid.
 [eva] tests/libc/math_h.c:45: Call to builtin atan
-[eva] tests/libc/math_h.c:45: 
-  function atan: precondition 'finite_arg' got status valid.
 [eva] tests/libc/math_h.c:45: Call to builtin atan
-[eva] tests/libc/math_h.c:45: 
-  function atan: precondition 'finite_arg' got status valid.
 [eva] tests/libc/math_h.c:45: Call to builtin atan
-[eva] tests/libc/math_h.c:45: 
-  function atan: precondition 'finite_arg' got status valid.
 [eva] tests/libc/math_h.c:45: Call to builtin atan
-[eva] tests/libc/math_h.c:45: 
-  function atan: precondition 'finite_arg' got status valid.
 [eva] tests/libc/math_h.c:45: Call to builtin atan
-[eva:alarm] tests/libc/math_h.c:45: Warning: 
-  function atan: precondition 'finite_arg' got status unknown.
 [eva] tests/libc/math_h.c:46: Call to builtin atanf
-[eva] tests/libc/math_h.c:46: 
-  function atanf: precondition 'finite_arg' got status valid.
 [eva] tests/libc/math_h.c:46: Call to builtin atanf
-[eva] tests/libc/math_h.c:46: 
-  function atanf: precondition 'finite_arg' got status valid.
 [eva] tests/libc/math_h.c:46: Call to builtin atanf
-[eva] tests/libc/math_h.c:46: 
-  function atanf: precondition 'finite_arg' got status valid.
 [eva] tests/libc/math_h.c:46: Call to builtin atanf
-[eva] tests/libc/math_h.c:46: 
-  function atanf: precondition 'finite_arg' got status valid.
 [eva] tests/libc/math_h.c:46: Call to builtin atanf
-[eva] tests/libc/math_h.c:46: 
-  function atanf: precondition 'finite_arg' got status valid.
 [eva] tests/libc/math_h.c:46: Call to builtin atanf
-[eva] tests/libc/math_h.c:46: 
-  function atanf: precondition 'finite_arg' got status valid.
 [eva] tests/libc/math_h.c:46: Call to builtin atanf
-[eva] tests/libc/math_h.c:46: 
-  function atanf: precondition 'finite_arg' got status valid.
 [eva] tests/libc/math_h.c:46: Call to builtin atanf
-[eva] tests/libc/math_h.c:46: 
-  function atanf: precondition 'finite_arg' got status valid.
 [eva] tests/libc/math_h.c:46: Call to builtin atanf
-[eva:alarm] tests/libc/math_h.c:46: Warning: 
-  function atanf: precondition 'finite_arg' got status unknown.
 [eva] computing for function atanl <- main.
   Called from tests/libc/math_h.c:47.
 [eva] using specification for function atanl
-[eva] tests/libc/math_h.c:47: 
-  function atanl: precondition 'finite_arg' got status valid.
 [eva] Done for function atanl
 [eva] computing for function atanl <- main.
   Called from tests/libc/math_h.c:47.
-[eva] tests/libc/math_h.c:47: 
-  function atanl: precondition 'finite_arg' got status valid.
 [eva] Done for function atanl
 [eva] computing for function atanl <- main.
   Called from tests/libc/math_h.c:47.
-[eva] tests/libc/math_h.c:47: 
-  function atanl: precondition 'finite_arg' got status valid.
 [eva] Done for function atanl
 [eva] computing for function atanl <- main.
   Called from tests/libc/math_h.c:47.
-[eva] tests/libc/math_h.c:47: 
-  function atanl: precondition 'finite_arg' got status valid.
 [eva] Done for function atanl
 [eva] computing for function atanl <- main.
   Called from tests/libc/math_h.c:47.
-[eva] tests/libc/math_h.c:47: 
-  function atanl: precondition 'finite_arg' got status valid.
 [eva] Done for function atanl
 [eva] computing for function atanl <- main.
   Called from tests/libc/math_h.c:47.
-[eva] tests/libc/math_h.c:47: 
-  function atanl: precondition 'finite_arg' got status valid.
 [eva] Done for function atanl
 [eva] computing for function atanl <- main.
   Called from tests/libc/math_h.c:47.
-[eva] tests/libc/math_h.c:47: 
-  function atanl: precondition 'finite_arg' got status valid.
 [eva] Done for function atanl
 [eva] computing for function atanl <- main.
   Called from tests/libc/math_h.c:47.
-[eva] tests/libc/math_h.c:47: 
-  function atanl: precondition 'finite_arg' got status valid.
 [eva] Done for function atanl
 [eva] computing for function atanl <- main.
   Called from tests/libc/math_h.c:47.
-[eva:alarm] tests/libc/math_h.c:47: Warning: 
-  function atanl: precondition 'finite_arg' got status unknown.
 [eva] Done for function atanl
 [eva] computing for function fabs <- main.
   Called from tests/libc/math_h.c:48.
 [eva] using specification for function fabs
-[eva] tests/libc/math_h.c:48: 
-  function fabs: precondition 'finite_arg' got status valid.
 [eva] Done for function fabs
 [eva] computing for function fabs <- main.
   Called from tests/libc/math_h.c:48.
-[eva] tests/libc/math_h.c:48: 
-  function fabs: precondition 'finite_arg' got status valid.
 [eva] Done for function fabs
 [eva] computing for function fabs <- main.
   Called from tests/libc/math_h.c:48.
-[eva] tests/libc/math_h.c:48: 
-  function fabs: precondition 'finite_arg' got status valid.
 [eva] Done for function fabs
 [eva] computing for function fabs <- main.
   Called from tests/libc/math_h.c:48.
-[eva] tests/libc/math_h.c:48: 
-  function fabs: precondition 'finite_arg' got status valid.
 [eva] Done for function fabs
 [eva] computing for function fabs <- main.
   Called from tests/libc/math_h.c:48.
-[eva] tests/libc/math_h.c:48: 
-  function fabs: precondition 'finite_arg' got status valid.
 [eva] Done for function fabs
 [eva] computing for function fabs <- main.
   Called from tests/libc/math_h.c:48.
-[eva] tests/libc/math_h.c:48: 
-  function fabs: precondition 'finite_arg' got status valid.
 [eva] Done for function fabs
 [eva] computing for function fabs <- main.
   Called from tests/libc/math_h.c:48.
-[eva] tests/libc/math_h.c:48: 
-  function fabs: precondition 'finite_arg' got status valid.
 [eva] Done for function fabs
 [eva] computing for function fabs <- main.
   Called from tests/libc/math_h.c:48.
-[eva] tests/libc/math_h.c:48: 
-  function fabs: precondition 'finite_arg' got status valid.
 [eva] Done for function fabs
 [eva] computing for function fabs <- main.
   Called from tests/libc/math_h.c:48.
-[eva:alarm] tests/libc/math_h.c:48: Warning: 
-  function fabs: precondition 'finite_arg' got status unknown.
+[eva] Done for function fabs
+[eva] computing for function fabs <- main.
+  Called from tests/libc/math_h.c:48.
+[eva] Done for function fabs
+[eva] computing for function fabs <- main.
+  Called from tests/libc/math_h.c:48.
+[eva] Done for function fabs
+[eva] computing for function fabs <- main.
+  Called from tests/libc/math_h.c:48.
+[eva] Done for function fabs
+[eva] computing for function fabs <- main.
+  Called from tests/libc/math_h.c:48.
+[eva] Done for function fabs
+[eva] computing for function fabs <- main.
+  Called from tests/libc/math_h.c:48.
+[eva] Done for function fabs
+[eva] computing for function fabs <- main.
+  Called from tests/libc/math_h.c:48.
+[eva] Done for function fabs
+[eva] computing for function fabs <- main.
+  Called from tests/libc/math_h.c:48.
+[eva] Done for function fabs
+[eva] computing for function fabs <- main.
+  Called from tests/libc/math_h.c:48.
+[eva] Done for function fabs
+[eva] computing for function fabs <- main.
+  Called from tests/libc/math_h.c:48.
 [eva] Done for function fabs
 [eva] computing for function fabsf <- main.
   Called from tests/libc/math_h.c:49.
 [eva] using specification for function fabsf
-[eva] tests/libc/math_h.c:49: 
-  function fabsf: precondition 'finite_arg' got status valid.
 [eva] Done for function fabsf
 [eva] computing for function fabsf <- main.
   Called from tests/libc/math_h.c:49.
-[eva] tests/libc/math_h.c:49: 
-  function fabsf: precondition 'finite_arg' got status valid.
 [eva] Done for function fabsf
 [eva] computing for function fabsf <- main.
   Called from tests/libc/math_h.c:49.
-[eva] tests/libc/math_h.c:49: 
-  function fabsf: precondition 'finite_arg' got status valid.
 [eva] Done for function fabsf
 [eva] computing for function fabsf <- main.
   Called from tests/libc/math_h.c:49.
-[eva] tests/libc/math_h.c:49: 
-  function fabsf: precondition 'finite_arg' got status valid.
 [eva] Done for function fabsf
 [eva] computing for function fabsf <- main.
   Called from tests/libc/math_h.c:49.
-[eva] tests/libc/math_h.c:49: 
-  function fabsf: precondition 'finite_arg' got status valid.
 [eva] Done for function fabsf
 [eva] computing for function fabsf <- main.
   Called from tests/libc/math_h.c:49.
-[eva] tests/libc/math_h.c:49: 
-  function fabsf: precondition 'finite_arg' got status valid.
 [eva] Done for function fabsf
 [eva] computing for function fabsf <- main.
   Called from tests/libc/math_h.c:49.
-[eva] tests/libc/math_h.c:49: 
-  function fabsf: precondition 'finite_arg' got status valid.
 [eva] Done for function fabsf
 [eva] computing for function fabsf <- main.
   Called from tests/libc/math_h.c:49.
-[eva] tests/libc/math_h.c:49: 
-  function fabsf: precondition 'finite_arg' got status valid.
 [eva] Done for function fabsf
 [eva] computing for function fabsf <- main.
   Called from tests/libc/math_h.c:49.
-[eva:alarm] tests/libc/math_h.c:49: Warning: 
-  function fabsf: precondition 'finite_arg' got status unknown.
 [eva] Done for function fabsf
 [eva] computing for function fabsl <- main.
   Called from tests/libc/math_h.c:50.
 [eva] using specification for function fabsl
-[eva] tests/libc/math_h.c:50: 
-  function fabsl: precondition 'finite_arg' got status valid.
 [eva] Done for function fabsl
 [eva] computing for function fabsl <- main.
   Called from tests/libc/math_h.c:50.
-[eva] tests/libc/math_h.c:50: 
-  function fabsl: precondition 'finite_arg' got status valid.
 [eva] Done for function fabsl
 [eva] computing for function fabsl <- main.
   Called from tests/libc/math_h.c:50.
-[eva] tests/libc/math_h.c:50: 
-  function fabsl: precondition 'finite_arg' got status valid.
 [eva] Done for function fabsl
 [eva] computing for function fabsl <- main.
   Called from tests/libc/math_h.c:50.
-[eva] tests/libc/math_h.c:50: 
-  function fabsl: precondition 'finite_arg' got status valid.
 [eva] Done for function fabsl
 [eva] computing for function fabsl <- main.
   Called from tests/libc/math_h.c:50.
-[eva] tests/libc/math_h.c:50: 
-  function fabsl: precondition 'finite_arg' got status valid.
 [eva] Done for function fabsl
 [eva] computing for function fabsl <- main.
   Called from tests/libc/math_h.c:50.
-[eva] tests/libc/math_h.c:50: 
-  function fabsl: precondition 'finite_arg' got status valid.
 [eva] Done for function fabsl
 [eva] computing for function fabsl <- main.
   Called from tests/libc/math_h.c:50.
-[eva] tests/libc/math_h.c:50: 
-  function fabsl: precondition 'finite_arg' got status valid.
 [eva] Done for function fabsl
 [eva] computing for function fabsl <- main.
   Called from tests/libc/math_h.c:50.
-[eva] tests/libc/math_h.c:50: 
-  function fabsl: precondition 'finite_arg' got status valid.
 [eva] Done for function fabsl
 [eva] computing for function fabsl <- main.
   Called from tests/libc/math_h.c:50.
-[eva:alarm] tests/libc/math_h.c:50: Warning: 
-  function fabsl: precondition 'finite_arg' got status unknown.
+[eva] Done for function fabsl
+[eva] computing for function fabsl <- main.
+  Called from tests/libc/math_h.c:50.
+[eva] Done for function fabsl
+[eva] computing for function fabsl <- main.
+  Called from tests/libc/math_h.c:50.
+[eva] Done for function fabsl
+[eva] computing for function fabsl <- main.
+  Called from tests/libc/math_h.c:50.
+[eva] Done for function fabsl
+[eva] computing for function fabsl <- main.
+  Called from tests/libc/math_h.c:50.
+[eva] Done for function fabsl
+[eva] computing for function fabsl <- main.
+  Called from tests/libc/math_h.c:50.
+[eva] Done for function fabsl
+[eva] computing for function fabsl <- main.
+  Called from tests/libc/math_h.c:50.
+[eva] Done for function fabsl
+[eva] computing for function fabsl <- main.
+  Called from tests/libc/math_h.c:50.
+[eva] Done for function fabsl
+[eva] computing for function fabsl <- main.
+  Called from tests/libc/math_h.c:50.
+[eva] Done for function fabsl
+[eva] computing for function fabsl <- main.
+  Called from tests/libc/math_h.c:50.
+[eva] Done for function fabsl
+[eva] computing for function fabsl <- main.
+  Called from tests/libc/math_h.c:50.
+[eva] Done for function fabsl
+[eva] computing for function fabsl <- main.
+  Called from tests/libc/math_h.c:50.
+[eva] Done for function fabsl
+[eva] computing for function fabsl <- main.
+  Called from tests/libc/math_h.c:50.
+[eva] Done for function fabsl
+[eva] computing for function fabsl <- main.
+  Called from tests/libc/math_h.c:50.
+[eva] Done for function fabsl
+[eva] computing for function fabsl <- main.
+  Called from tests/libc/math_h.c:50.
+[eva] Done for function fabsl
+[eva] computing for function fabsl <- main.
+  Called from tests/libc/math_h.c:50.
+[eva] Done for function fabsl
+[eva] computing for function fabsl <- main.
+  Called from tests/libc/math_h.c:50.
+[eva] Done for function fabsl
+[eva] computing for function fabsl <- main.
+  Called from tests/libc/math_h.c:50.
+[eva] Done for function fabsl
+[eva] computing for function fabsl <- main.
+  Called from tests/libc/math_h.c:50.
 [eva] Done for function fabsl
 [eva] computing for function __finite <- main.
   Called from tests/libc/math_h.c:54.
@@ -332,7 +305,7 @@
   atanl_one ∈ [-inf .. inf]
   atanl_minus_one ∈ [-inf .. inf]
   atanl_large ∈ [-inf .. inf]
-  atanl_ld_top ∈ [-inf .. inf]
+  atanl_ld_top ∈ [-inf .. inf] ∪ {NaN}
   fabs_pi ∈ {3.14159265359}
   fabs_half_pi ∈ {1.57079632679}
   fabs_e ∈ {2.71828182846}
@@ -341,7 +314,7 @@
   fabs_one ∈ {1.}
   fabs_minus_one ∈ {1.}
   fabs_large ∈ {1e+38}
-  fabs_top ∈ [-0. .. 1.79769313486e+308]
+  fabs_top ∈ [-0. .. inf] ∪ {NaN}
   fabsf_f_pi ∈ {3.14159274101}
   fabsf_f_half_pi ∈ {1.57079637051}
   fabsf_f_e ∈ {2.71828174591}
@@ -350,7 +323,7 @@
   fabsf_one ∈ {1.}
   fabsf_minus_one ∈ {1.}
   fabsf_large ∈ {9.99999968029e+37}
-  fabsf_f_top ∈ [-0. .. 3.40282346639e+38]
+  fabsf_f_top ∈ [-0. .. inf] ∪ {NaN}
   fabsl_ld_pi ∈ [-inf .. inf]
   fabsl_ld_half_pi ∈ [-inf .. inf]
   fabsl_ld_e ∈ [-inf .. inf]
@@ -359,6 +332,6 @@
   fabsl_one ∈ [-inf .. inf]
   fabsl_minus_one ∈ [-inf .. inf]
   fabsl_large ∈ [-inf .. inf]
-  fabsl_ld_top ∈ [-inf .. inf]
+  fabsl_ld_top ∈ [-inf .. inf] ∪ {NaN}
   r ∈ {0}
   __retres ∈ {0}