def translate_gene(self, gene):
        """
        Translate a gene with binary DNA into a base-10 floating point real number.
        
        Parses the DNA in this manner:
          1. The first bit determines the sign of the integer portion of the result (0=positive, 1=negative)
          2. The next ``significand_length`` bits of the DNA are converted into a base-10 integer,
             and given a positive/negative sign based on step (1).
          3. The next bit determines the sign of the exponent portion of the result (0=positive, 1=negative)
          4. The remaining bits in the DNA are converted into a base-10 integer, and given a
             positive/negative sign based on step (3).
          5. The result of step (2) is multiplied by 10 raised to the power of the result of step (4).
          
        Example:  let DNA="001111", significand_length=3
          1. "0" indicates a positive sign for the integer portion
          2. "011" is converted into the base-10 integer 3, its sign stays positive due to step (1)
          3. "1" indicates a negative sign for the exponent portion
          4. The remaining "1" bit is converted into the base-10 integer 1 and becomes -1 due to step (3)
          5. The final result becomes:  3 * 10^-1 = 0.3
        """
        if self.signed:
            sign = 1 if gene.dna[0] == '0' else -1
            base_start_idx = 1
        else:
            sign = 1
            base_start_idx = 0

        base = sign * int(gene.dna[base_start_idx:base_start_idx + self.significand_length], base=2)
        
        exponent_sign = 1 if gene.dna[1 + self.significand_length] == '0' else -1
        exponent = exponent_sign * int(gene.dna[self.significand_length + 2:], base=2)
        
        return float(base * 10 ** exponent)