let unary_arithmetic_function  ~with_alarms info f e1 =
    try
      let v1 = project_ival e1 in
      inject_ival (f v1)
    with Not_based_on_null  ->
      (match with_alarms.imprecision_tracing with
       | Aignore -> ()
       | Acall f -> f ()
       | Alog -> match e1 with
         | Map _ ->
             warn_once "Operation %s %a incurs a loss of precision"
               info pretty e1
         | _ -> ());
      topify_arith_origin e1