code: def frange(stop, start=None, step=1.0):
      
      if not step:
          raise ValueError('step must be non-zero')
      if start is None:
          start, stop = 0.0, stop * 1.0
      else:
          # swap when all args are used
          stop, start = start * 1.0, stop * 1.0
      count = int(math.ceil((stop - start) / step))
      ret = [None] * count
      if not ret:
          return ret
      ret[0] = start
      for i in xrange(1, count):
          ret[i] = ret[i - 1] + step
      return ret
docs: A :func:`range` clone for float-based ranges.
  
      >>> frange(5)
      [0.0, 1.0, 2.0, 3.0, 4.0]
      >>> frange(6, step=1.25)
      [0.0, 1.25, 2.5, 3.75, 5.0]
      >>> frange(100.5, 101.5, 0.25)
      [100.5, 100.75, 101.0, 101.25]
      >>> frange(5, 0)
      []
      >>> frange(5, 0, step=-1.25)
      [5.0, 3.75, 2.5, 1.25]