I am modifying an open source C++ program. I found that my output was not the same as the original, so I spent the last 3 days searching for the errors in my program, then making extensive back-modifications to make my program's output identical to the original. I finally went back to the original, and made only minimal changes to allow compilation with my makefile.
The errors persisted. Reasoning that the original was probably compiled with optimization, I tried that and sure enough the differences disappeared (some with -O and the rest disappeared using -O2).
Calculations done mainly with integer math were fine to begin with. Using -O, linear interpolation involving doubles yielded the same results, and all results including more complex interpolation and double to int conversions were the same using -O2.
I cannot verify my output other than by using the original program.
Which results are correct? Am I to assume that optimization does something bad? [my program correct, the original compiled with optimizations incorrect].