Re: [ROOT] discrepancies with floats

From: Alberto Pulvirenti (alberto.pulvirenti@ct.infn.it)
Date: Mon May 13 2002 - 09:31:26 MEST


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