Hi! I'll try to ask this question again, here as nobody seems to read the newsgroup root.cern.ch. Hannes. -------- Original Message -------- Subject: problem with operator precedence? Date: Mon, 30 Jul 2001 15:45:07 +0200 From: Hannes SAKULIN <Hannes.Sakulin@cern.ch> Organization: CERN Newsgroups: cern.root Hi, I am observing a very strange behavior with root Version 3.01/06 12 July 2001 (from na49). It seems like the precedence of && over || is not followed in all cases. The if expressions below should always evaluate to true but for some reason the second one evaluates to false when I call the function (RunGMT1_cutJul2001()) from within a loop. The output of the test program looks like this: root [8] .x xx.C TRUE w. brackets true without TRUE w. brackets false without *** oops !!! *** eta = 0.9 TRUE w. brackets false without *** oops !!! *** eta = 0.9 Does anybody have an ides what is going wrong in my little example? Best Regards, Hannes Sakulin. void xx () { RunGMT1_cutJul2001(); for (int iev = 0; iev <2; iev++) { RunGMT1_cutJul2001(); } } void RunGMT1_cutJul2001() { float eta = .9; bool xx; if ( 1 && ( (eta > 0.98 && eta < 1.02) || (eta > 1.38 && eta < 1.42) || (eta > 0.88 && eta < 0.92) )) { cout << "TRUE w. brackets " ; xx=true; } else { cout << "FALSE w. brackets " ; xx=false; } if (1 && ( eta > 0.98 && eta < 1.02 || eta > 1.38 && eta < 1.42 || eta > 0.88 && eta < 0.92 ) ) { cout << "true without " << endl; } else { cout << "false without" << endl; if (xx) cout << "*** oops !!! *** eta = " << eta << endl; } }
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:58 MET