anchor.diff:  ins_dp([H|T], DP) when DP > 0 -> [H | ins_dp(T, DP-1)];
   ins_dp(M, DP) when DP =:= -1 -> ins_dp(["0"|M], DP+1);
   ins_dp(M, DP) when DP < 0 -> ins_dp(["00"|M], DP+1).
  +
  +%% - % strip all spaces from both ends
  +%% - to_num([$ |_] = Num) -> to_num(string:strip(Num));
  +%% - to_num("") -> exit(invalid_number);
  +%% - to_num("-") -> exit(invalid_number);
  +%% - to_num("0") -> <<1,128>>;
  +%% - to_num(Num) ->
  +%% -     case Num of
  +%% -         % -ve number
  +%% -         [$-|Rest] ->
  +%% -             {E, Digits} = expo_digits(Rest),
  +%% -             << length(Num) + 1
  +%% -                , 0:1/integer-unit:1
  +%% -                , bnot (E+128+65):7/integer-unit:1
  +%% -                , list_to_binary(Digits)/bytes
  +%% -             >>;
  +%% -         % +ve number
  +%% -         Num ->
  +%% -             {E, Digits} = expo_digits(Num),
  +%% -             << length(Num) + 1
  +%% -                , 1:1/integer-unit:1
  +%% -                , (E+128+65):7/integer-unit:1
  +%% -                , list_to_binary(Digits)/bytes
  +%% -             >>
  +%% -     end.
  +%% - 
  +%% - tidy(Num) ->
  +%% -     % leading and trailing spaces and and then leading zeros removed
  +%% -     % except for < 1 numbers where 0. is added
  +%% -     {Dot, Num2} =
  +%% -         case string:strip(string:strip(Num), left, $0) of
  +%% -             [$.|T] -> {true,[$0,$.|T]};
  +%% -             Num1 -> {false,Num1}
  +%% -         end,
  +%% -     .
  +%% - % trailing zero removed only if decimal
  +%% - tidy(Dot,[],Tidy) ->
  +%% -     if Dot -> string:strip(Tidy, right, $0);
  +%% -        true -> Tidy
  +%% -     end;
  +%% - % 0.
  +%% - tidy(_,[$0,$.|Num],Tidy) -> tidy(true,Num,[$0,$.|Tidy]);
  +%% - % has dot
  +%% - tidy(false,[$0|Num],Tidy) -> tidy(Dot,Num,[D|Tidy]);
  +%% - tidy(false,[D|Num],Tidy) -> tidy(Num,[D|Tidy]);
  +%% - 
  +%% - 
  +%% - expo_digits(Num) ->
  +%% -     Num1 = 
  +%% -     expo_digits({0,[]}, Num).
  +%% - expo_digits({E,Num},[]) -> {E, Num};
  +%% - % number with leading decimal and zeros (in pair)
  +%% - expo_digits({E,Acc},[$0,$.,$0,$0|Rest]) ->
  +%% -     expo_digits({E+1,Acc},[$0,$.|Rest]);
  +%% - % number with leading decimal
  +%% - expo_digits({E,Acc},[$0,$.|Rest]) ->
  +%% -     expo_digits({E
  +%% -                  , Acc ++
  +%% -                  if (length(Rest) rem 2) /= 0 ->
  +%% -                         Rest++[$0];
  +%% -                     true -> Rest
  +%% -                  end
  +%% -                 },[]);
  +%% - 
  +%% - expo_digits({E,Acc},[$.|Rest]) -> {E,lists:reverse(Acc)++Rest};
  +%% - expo_digits({E,Acc},[D|Num]) -> expo_digits({E+1,[D|Acc],Num).
  +%% - 
  +%% - % Digits
  +%% - digits([]) -> [];
  +%% - digits(Num)
  +%% -   when (length(Num) rem 2) /= 0 -> digits([$0|Num]);
  +%% - digits([N1,N2|Num]) -> [[N1,N2]|digits(Num)].
   
   -spec from_dts(Date | TimeStamp | TimeStampWithZone) ->
           {{year(),month(),day()}, {hour(),minute(),second()}}
  
positive.code:         , to_dts/1
          , to_intv/1
          , from_num/1
          ]).
  
  -type year()        :: pos_integer().
  
negative.code:                 || << MantissaDigit >> <= MantissaBytes],
      % If the number is negative, you do the same, but subsequently the bits are
      % inverted.
  %io:format(user, "MantissaBytes ~p~nMantissa ~p~n", [MantissaBytes, Mantissa]),
      << Exp/integer >> = << (bnot E)/integer >>,
      [$- | ?TO_STR(Mantissa, Exp - 128 - 65)].
  
  