1. A method for reading data from a flash memory cell, the method comprising: detecting voltages from a group of memory cells, the group of memory cells having associated metadata for error detection, each memory cell storing a voltage representing a data value selected from a plurality of possible data values, each possible data value corresponding to one range of a plurality of non-overlapping ranges of analog voltages; identifying memory cells having uncertain data values based on the detected voltages; determining alternative data values for the memory cells having the uncertain data values; selecting a combination of alternative data values; and performing an error detection test using the metadata associated with the plurality of memory cells and the selected combination of alternative data values.