<p>I've got a few hundred computers running an app.  On one computer, I've seen two instances of a single bit being incorrectly set on some strings that I pull out of SQLite.  If this was my dev computer I would assume I have a bug somewhere, but there is certainly some number of installations at which point I'll start seeing rare hardware based errors.</p>
<p>This is certainly dependent on how much IO I do, but are there any rules of thumbs for when there is a decent chance of seeing this kind of thing?  For example, for TCP packets, <a href="http://portal.acm.org/citation.cfm?doid=347059.347561" rel="nofollow noreferrer">this paper</a> determined that silent, undetected corruption will occur in &quot;roughly 1 in 16 million to 10 billion packets&quot;.</p>
<p>Unfortunately, running a mem/disk checker on the machine in question is not likely to happen.</p>

When I notice strange things happening, my strategy is:
check if there is a bug
in the code
check if there is a bug in the used library/tool (SQLite, here)
check if there is a bug
in the compiler
then, and only then, check for hardware faults
In my 10 years-long career, 99,99% of bugs were software related.
Hope this helps.