3 ms·
> they can decide if they want to store variables in registers or main memory, they can change the order of a variety of operations, etc. As long as they follo
by ori_b 15y ago
> they can decide if they want to store variables in registers or main memory, they can change the order of a variety of operations, etc.
As long as they follow the "as if rule", which states that any transformations that is done to code that does not invoke undefined behavior will produce the same final result as if the transformations were not done. Reordering floating point multiplications does not follow this rule.
(Watching stuff in a debugger doesn't count for this rule)
- Dylan16807 15y ago1. Are you saying that multiplications have a specified order? I asked that but didn't get a response. 2. The compiler is allowed to either leave the float inside the FPU or store it back to main memory after each operation, is it not? These give different results. Somewhere around here I have a chart of the differences in floating point outputs of different GCC versions. And no, fastmath is not on.
- ori_b 15y agoYes. Multiplication is left associative. I'm not sure that C defines the precision of floating point operations, although I think it sets an upper bound. I may be wrong, and I think that the C99 spec (optionally?) pushes compilers to conform to the iee754