anchor.diff:  
     (** Converts a decimal number, encoded in a string, to a binary string *)
     let bin_str_of_dec_str width d =
  -      bin_str_of_big_int width (BigInt.Parse d)
  +      bin_str_of_big_int width (bigint.Parse d)
   
     (** Converts an array of integers to a binary string *)
     let bin_str_of_int_array l (a:int[]) = 
  
positive.code:     done;
      (* make negative if required *)
      if sign then
        !b - BigInt.Pow(BigInt 2, BigInt l)
      else
        !b
  end
  
negative.code:       let zero = make a_bits in
        let one = make a_bits in
        one.data.[0] <- 1ul;
        let map,_ = List.fold (fun (map,cur_addr) el -> 
            let next_addr = make a_bits in
            (f_add next_addr cur_addr one)();
            Map.add cur_addr el map, next_addr
          ) (Map.empty, zero) dlist 
        in
        let lookup (addr:ArrayBits) = 
          match Map.tryFind addr map with
          | None -> last_element
          | Some(x) -> x
        in
  