Use stepwise abstraction. Odd-looking arithmetic operations may be required to maintain accuracy. Consider possible roundoff implications. Because changes to the code often introduce errors and inconsistencies, look for evidence of changes. Look for change logs or comments about changes imbedded in comments.
Stylistic differences can indicate changes by a programmer other than the author.
If, after a good deal of study, a piece of code is making no sense, ask another programmer to look at it. Consider explaining to him what you think you do know. Search for information, particularly in documentation, that relates objects in different knowledge domains, for example, comments that associate variables with problem-domain objects. Be wary of objects that have the same identifier but different scopes. Reasoning about the wrong objects can be frustrating.