def good_prefix(self, max_error=<NUM_LIT>, round_length=<NUM_LIT:2>, min_prefix='<STR_LIT>', max_prefix=None):
good_prefix = min_prefix<EOL>base_value = self.base_value()<EOL>for k, v in list(self.PREFIXES.items()):<EOL><INDENT>if max_prefix is not None and v > self.PREFIXES[max_prefix]:<EOL><INDENT>continue<EOL><DEDENT>if abs(round(base_value/v, round_length)*v - base_value) > base_value*max_error:<EOL><INDENT>continue<EOL><DEDENT>if abs(round(base_value/v, round_length)) < <NUM_LIT>:<EOL><INDENT>continue<EOL><DEDENT>if v < self.PREFIXES[good_prefix]:<EOL><INDENT>continue<EOL><DEDENT>good_prefix = k<EOL><DEDENT>return good_prefix<EOL>
returns the largest prefix where the relative error is bellow *max_error* although rounded
by *round_length*

if *max_prefix* is found in PrefixedUnit.PREFIXES, returned value will not exceed this
prefix.
if *min_prefix* is given, returned value will atleast be of that prefix (no matter the
error)