def distribute_value(samples, spacing=1.0, range_start=0.0, range_end=1.0):
    """
    Returns a list of values distributed between a start and end range
    :param samples: int, number of values to sample across the value range
    :param spacing: float, incremental scale for each sample distance
    :param range_start: float, minimum value in the sample range
    :param range_end: float, maximum value in the sample range
    :return: list<float>
    """
    value_list = [range_start]
    value_dst = abs(range_end - range_start)
    unit = 1.0
    factor = 1.0
    for i in range(samples - 2):
        unit += factor * spacing
        factor *= spacing
    unit = value_dst / unit
    total_unit = unit
    for i in range(samples - 2):
        mult_factor = total_unit / value_dst
        value_list.append(range_start - (range_start - range_end) * mult_factor
            )
        unit *= spacing
        total_unit += unit
    value_list.append(range_end)
    return value_list
