def best_units(num):
    """ Returns scale factor and prefix such that 1 <= num*scale < 1000"""
    if num < 1e-12:
        return 1e15, 'f'
    if num < 1e-9:
        return 1e12, 'p'
    if num < 1e-6:
        return 1e9, 'n'
    if num < 1e-3:
        return 1e6, 'u'
    if num < 1:
        return 1e3, 'm'
    if num < 1e3:
        return 1.0, ''
    if num < 1e6:
        return 1e-3, 'k'
    if num < 1e9:
        return 1e-6, 'M'
    if num < 1e12:
        return 1e-9, 'G'
    return 1e-12, 'T'