std min error during optimization

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



hi,
  I'm not subscribed to this list. Please add me to your replies.
  i've this code at http://codepad.org/L1Ko85ff or below which gives
different answers 8 and 9 (last line)  based on optimization (-O2) and
-O0 on my g++ cygwin (3.4).

When i redefine the min by mymin
#define mymin(a,b) ((a<b)?(a):(b)) it gives me 8 but when i replace it
with std:min it gives me 9  at -O0 on gcc 4.3.
Am i doing something wrong in the below code ?

#include<cstdio>
#include<iostream>
#include<sstream>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<cassert>
#include<ctime>
#include<algorithm>
#include<iterator>
#include<iostream>
#include<cctype>
#include<string>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<list>
using namespace std;




const int N=7;
int done[1<<12],gdo2[1<<12];
const int INF=1000000;

int g(int mask,int lvl){
  assert(mask<(1<<N));

   printf("MASK=%d\n",mask);

	if(gdo2[mask]) return gdo2[mask];

	if(lvl==N){
		if(done[mask]) return INF;
		 return mask;
	 }
 	 int ans=INF,i;
	 if(done[mask]==0) ans=mask;
	for(i=0;i<N;i++)
		if((mask&(1<<i))){
			ans=min(ans,min(g(mask^(1<<i) ,lvl+1),g(mask,lvl+1)));
		}

	return gdo2[mask]=ans;

}

int main(){
	
    	done[0]=done[1]=done[3]=done[2]=done[6]=done[4]=done[5]=done[7]=done[15]=1;

	     cout <<g(15,0)<<endl;

	return 0;
}


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux