diff --git a/src/plugins/e-acsl/typing.ml b/src/plugins/e-acsl/typing.ml
index da831b7e64b12aa55e3854439128959f8d12958b..c9f9bfeac2f417d76dccc90d90ff84ad4a9af2da 100644
--- a/src/plugins/e-acsl/typing.ml
+++ b/src/plugins/e-acsl/typing.ml
@@ -56,27 +56,33 @@ module D =
       let reprs = [ Gmpz; Real; Nan; c_int ]
       include Datatype.Undefined
 
-      (* TODO RATIONAL: re-implement this datatype *)
-      (*
       let compare ty1 ty2 = match ty1, ty2 with
         | C_type i1, C_type i2 ->
           if i1 = i2 then 0
           else if Cil.intTypeIncluded i1 i2 then -1 else 1
-        | (Other | C_type _), Gmp | Other, C_type _ -> -1
-        | Gmp, (C_type _ | Other) | C_type _, Other -> 1
-        | Gmp, Gmp | Other, Other -> 0
+        | (C_type _ | Gmpz | Real), Nan
+        | (C_type _ | Gmpz), Real
+        | C_type _, Gmpz ->
+          -1
+        | (Gmpz | Real | Nan), C_type _
+        | (Real | Nan), Gmpz
+        | Nan, Real ->
+          1
+        | Gmpz, Gmpz | Real, Real | Nan, Nan -> 0
 
       let equal = Datatype.from_compare
 
       let hash = function
-        | Gmp -> 787
-        | Other -> 1011
-        | C_type ik -> Hashtbl.hash ik
+        | C_type ik -> 7 * Hashtbl.hash ik
+        | Gmpz -> 787
+        | Real -> 1011
+        | Nan -> 1277
 
       let pretty fmt = function
-        | Gmp -> Format.pp_print_string fmt "GMP"
         | C_type k -> Printer.pp_ikind fmt k
-        | Other -> Format.pp_print_string fmt "OTHER"*)
+        | Gmpz -> Format.pp_print_string fmt "Gmpz"
+        | Real -> Format.pp_print_string fmt "Real"
+        | Nan -> Format.pp_print_string fmt "Nan"
     end)
 
 (******************************************************************************)