def unit_signature
      return @signature unless @signature.nil?
      vector = unit_signature_vector
      vector.each_with_index { |item, index| vector[index] = item * 20**index }
      @signature = vector.inject(0) { |acc, elem| acc + elem }
      @signature
    end
def unit_signature
      return @signature unless @signature.nil?
      vector = unit_signature_vector
      vector.each_with_index { |item, index| vector[index] = item * 20**index }
      @signature = vector.inject(0) { |acc, elem| acc + elem }
      @signature
    end
calculates the unit signature id for use in comparing compatible units and simplification
 the signature is based on a simple classification of units and is based on the following publication

 Novak, G.S., Jr. "Conversion of units of measurement", IEEE Transactions on Software Engineering, 21(8), Aug 1995, pp.651-661
 @see http://doi.ieeecomputersociety.org/10.1109/32.403789
 @return [Array]