code: def binary_to_float(binary_list, lower_bound, upper_bound):
      
      # Edge case for empty binary_list
      if binary_list == []:
          # With 0 bits, only one value can be represented,
          # and we default to lower_bound
          return lower_bound
  
  
      # A little bit of math gets us a floating point
      # number between upper and lower bound
      # We look at the relative position of
      # the integer corresponding to our binary list
      # between the upper and lower bound,
      # and offset that by lower bound
      return ((
          # Range between lower and upper bound
          float(upper_bound - lower_bound)
          # Divided by the maximum possible integer
          / (2**len(binary_list) - 1)
          # Times the integer represented by the given binary
          * binary_to_int(binary_list))
              # Plus the lower bound
              + lower_bound)
docs: Return a floating point number between lower and upper bounds, from binary.
  
      Args:
          binary_list: list<int>; List of 0s and 1s.
              The number of bits in this list determine the number of possible
              values between lower and upper bound.
              Increase the size of binary_list for more precise floating points.
          lower_bound: Minimum value for output, inclusive.
              A binary list of 0s will have this value.
          upper_bound: Maximum value for output, inclusive.
              A binary list of 1s will have this value.
  
      Returns:
          float; A floating point number.