Hi, I beg your pardon if I introduce in that discussion In some parts of the code I'm developing, I encountered a problem which seems to depend on a similar thing. I declared some Double_t variables, and put an if statement of this kind: Double_t x=...; if (if x > 1.0) { cout << "Error: " << x << " value is not allowed" << endl; } When executing, I got many time the following message: Error: 1 value is not allowed. Now I ask: if I put strictly X > 1.0 (not X >= 1.0), why the X = 1.0 value is caught as a "TRUE" condition? Becaue, in different case, I expect to see some decimals... Cheers, Alberto Rene Brun wrote: > Hi Christophe, > > The explanation of this apparent problem is the following: > When you do: > root [1] cout << x-6.7 << endl; > CINT makes the difference between x (a float) and 6.7 (a double) > if you do > float x=6.7; > float y = 6.7 > cout <<x-y<<endl; > you will get 0 > > Rene Brun > > Christophe DELAERE wrote: > >> Part 1.1 Type: Plain Text (text/plain) >> Encoding: 7bit >> > Hi rooters, > > I've noticed the following strange behaviour using ROOT 3.02/07. > When I declare a single variable, there are discrepancies between the > value entered and actual value stored, even for basic float objects. > When a float is declared and filled, the value stored is slightly > different from what is needed. > In most of the cases this is not a problem, but it can be if the > variable is multiplied by a large interger. > > Is this fact known ? Is there a simple solution? > > Thanks, > Christophe. > > p.s: Here is a c&p of a minimal session. > I'm running linux redhat 6.2 with a precompiled ROOT 3.02/07. > > > root [0] Float_t x = 6.7 > > root [1] cout << x-6.7 << endl; > > -1.90735e-07 > > root [2] cout << x << endl; > > 6.7 > > root [3] x > > (Float_t)6.69999980926513672e+00 >
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:52 MET