diff --git a/src/plugins/value/legacy/eval_terms.ml b/src/plugins/value/legacy/eval_terms.ml
index c40ad9050fdf45fbffcef7bdc8e7bfd4ad12dc54..3cddc2d81755b5a0bf0a290b2a47c32eb14d3cb9 100644
--- a/src/plugins/value/legacy/eval_terms.ml
+++ b/src/plugins/value/legacy/eval_terms.ml
@@ -640,6 +640,8 @@ let known_logic_funs = [
 let known_predicates = [
   "\\warning", ACSL;
   "\\is_finite", ACSL;
+  "\\is_plus_infinity", ACSL;
+  "\\is_minus_infinity", ACSL;
   "\\is_NaN", ACSL;
   "\\eq_float", ACSL;
   "\\ne_float", ACSL;
@@ -1788,9 +1790,22 @@ let reduce_by_known_papp ~alarm_mode env positive li _labels args =
     with LogicEvalError _ | Not_an_exact_loc | Cvalue.V.Not_based_on_null ->
       env
   in
+  let reduce_by_infinity ~pos prec f =
+    let inf = if pos then Fval.pos_infinity prec else Fval.neg_infinity prec in
+    let fval =
+      if positive
+      then inf
+      else Fval.(join nan (join (Fval.neg inf) (top_finite prec)))
+    in
+    Fval.narrow fval f
+  in
   match positive, li.l_var_info.lv_name, args with
   | _, "\\is_finite", [arg] ->
     reduce_float (Fval.backward_is_finite ~positive) arg
+  | _, "\\is_plus_infinity", [arg] ->
+    reduce_float (reduce_by_infinity ~pos:true) arg
+  | _, "\\is_minus_infinity", [arg] ->
+    reduce_float (reduce_by_infinity ~pos:false) arg
   | _, "\\is_NaN", [arg] ->
     reduce_float (fun _fkind -> Fval.backward_is_nan ~positive) arg
   | _ , ("\\eq_float" | "\\eq_double"), [t1;t2] ->