c++ - floating-point optimization
- Brian Gardner <briangr friberg.us> Oct 01 2006
- Walter Bright <newshound digitalmars.com> Oct 01 2006
- Brian Gardner <briangr friberg.us> Oct 02 2006
- Walter Bright <newshound digitalmars.com> Oct 02 2006
Does DMC perform floating-point optimizations with the -o option? For example: y = 2.0l * (1.0l * x + 0.0l); after optimization becomes: y = x + x; Thanks, Brian
Oct 01 2006
Brian Gardner wrote:Does DMC perform floating-point optimizations with the -o option? For example: y = 2.0l * (1.0l * x + 0.0l); after optimization becomes: y = x + x;
To check what kinds it does, it's pretty easy to write up a sample, compile it, then obj2asm the result. For the above case, the two statements aren't equivalent.
Oct 01 2006
Walter Bright wrote:Brian Gardner wrote:Does DMC perform floating-point optimizations with the -o option? For example: y = 2.0l * (1.0l * x + 0.0l); after optimization becomes: y = x + x;
To check what kinds it does, it's pretty easy to write up a sample, compile it, then obj2asm the result.
Well, I'm not familiar with assembler code. Anyway I set up a test code: #include <stdio.h> int main(int argc, char *argv[]){ long double y, x = argc; y = 1.0l * x + 0.0l; return printf("%Lg\n", y); } With or without -o, instruction faddp is in the asm code generated from obj2asm. So, this means that x + 0.0l is left? What about for 1.0l * x?For the above case, the two statements aren't equivalent.
So, 2.0l * x is not equivalent to x + x? Why? Thanks, Brian
Oct 02 2006
Brian Gardner wrote:So, 2.0l * x is not equivalent to x + x? Why?
(x + x) would be equivalent to (2.00 * x).
Oct 02 2006








Walter Bright <newshound digitalmars.com>