For data storage (e.g., cache, main memory, long term storage, etc.), there is typically a trade-off between quality of service and error correction. Quality of service refers to a level of precision with which a computer system (e.g., storage system) processes data. Error correction refers to processes a hardware system performs in order to correct errors in data. As the quality of service (e.g., precision of data) increases, the amount of error-correction that a hardware device (e.g., memory device) must perform typically goes up. Conversely, as less quality of service is needed, the amount of error-correction that a hardware device must perform typically goes down.
A computer system may be configured to compute with full data-correctness-guarantees (e.g., high-precision). Computing with full data-correctness-guarantees refers to maintaining all, or substantially all, bits of the data. However, computing full data-correctness-guarantees, on a full-time basis, is often not practical for many computing operations. Hardware (e.g., a memory device) typically provides strong guarantees for error correction. Software typically relies completely on hardware to maintain full data error-correction guarantees. Such complete reliance on hardware is demanding on the hardware. The demand can lead to memory devices that operate more slowly. Perhaps worse, the memory devices may also experience shorter life spans. For example, precise flash memory operation may cause quicker wear out due to the need for a larger number of write iterations. When the hardware cannot maintain the error-correction guarantees, the hardware issues a fatal error. Then, neither the hardware nor the software can proceed with normal computing operations.
Full data-correctness-guarantees (e.g., high-precision operations with an effort to maintain the precision of all bits of data), which are often required by hardware, are not always needed for software applications. Some software applications can tolerate errors in some of their data structures, such as, for example, picture data, audio data, video data, and/or most other data that a user decides to store. A computer can process these types of data with approximate precision and, at the same time, maintain virtually no perceptible difference in the user experience during the processing of the data. In one example, approximate storage refers to a computer system storing data in memory, and later the memory device returning approximately the data that was stored in that memory. Approximate precision is the precision with which the memory device returns approximately the data that was stored in the memory. Approximate precision is a precision level at which the memory device does not guarantee full data-correctness for one or more variables of data. For example, the memory device does not guarantee all bits of the data are correct.