Velocity Reviews > C++ > float and double question

float and double question

Pat
Guest
Posts: n/a

 05-21-2004
Give two double-typed variable X and Y.

If (X==Y) is true,

then how about the following results:
(float(X) > float(Y))?
(float(X) < float(Y))?
(float(X) >= float(Y))?
( X > float(Y) )?
( X < float(Y) )?
( X == float(Y) )?

Will the results be independent of compliers and OS platforms?

Thanks. Pat

Victor Bazarov
Guest
Posts: n/a

 05-21-2004
"Pat" <(E-Mail Removed)> wrote...
> Give two double-typed variable X and Y.
>
> If (X==Y) is true,
>
> then how about the following results:
> (float(X) > float(Y))?
> (float(X) < float(Y))?
> (float(X) >= float(Y))?
> ( X > float(Y) )?
> ( X < float(Y) )?
> ( X == float(Y) )?
>
> Will the results be independent of compliers and OS platforms?

Unless there is an overflow (resulting in infinity values), the
expression

float(X) == float(Y)

should always evaluate 'true' if X == Y evaluates 'true'.

Also, if you attempt to compare float(X) and Y [or X and float(Y)],
both will be converted back to 'double' and the result will most
definitely depend on values of X and Y, compiler, and hardware.

Victor

Dave Townsend
Guest
Posts: n/a

 05-21-2004
Pat,

I did some experiments, I found that float(X) is rounding on my MVC++
compiler, so if X=0.499999999, float(X) = 0.5, but if X = 0.511111111,
float(X) = 0.51111, so we get both > and < situations.

If X == Y, then always float(X) == float(Y)

dave

"Pat" <(E-Mail Removed)> wrote in message news:40ad7e91\$(E-Mail Removed)-cable.com...
> Give two double-typed variable X and Y.
>
> If (X==Y) is true,
>
> then how about the following results:
> (float(X) > float(Y))?
> (float(X) < float(Y))?
> (float(X) >= float(Y))?
> ( X > float(Y) )?
> ( X < float(Y) )?
> ( X == float(Y) )?
>
> Will the results be independent of compliers and OS platforms?
>
> Thanks. Pat
>
>

Ian
Guest
Posts: n/a

 05-21-2004
Dave Townsend wrote:
> Pat,
>
> I did some experiments, I found that float(X) is rounding on my MVC++
> compiler, so if X=0.499999999, float(X) = 0.5, but if X = 0.511111111,
> float(X) = 0.51111, so we get both > and < situations.
>

abs(0.5-0.511111111). 7 orders of magnitude difference.

Ian

> If X == Y, then always float(X) == float(Y)
>
>
> dave
>
>
> "Pat" <(E-Mail Removed)> wrote in message news:40ad7e91\$(E-Mail Removed)-cable.com...
>
>>Give two double-typed variable X and Y.
>>
>>If (X==Y) is true,
>>
>>then how about the following results:
>>(float(X) > float(Y))?
>>(float(X) < float(Y))?
>>(float(X) >= float(Y))?
>>( X > float(Y) )?
>>( X < float(Y) )?
>>( X == float(Y) )?
>>
>>Will the results be independent of compliers and OS platforms?
>>
>>Thanks. Pat
>>
>>

>
>
>

Dave Townsend
Guest
Posts: n/a

 05-21-2004

Ian,

Sorry, not following what you said.

I'm saying that because the float type casting operation rounds, in some
cases
it will round down and some it will round up, so we get both < and > for the
examples.

dave

"Ian" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> Dave Townsend wrote:
> > Pat,
> >
> > I did some experiments, I found that float(X) is rounding on my MVC++
> > compiler, so if X=0.499999999, float(X) = 0.5, but if X = 0.511111111,
> > float(X) = 0.51111, so we get both > and < situations.
> >

> abs(0.5-0.511111111). 7 orders of magnitude difference.
>
> Ian
>
> > If X == Y, then always float(X) == float(Y)
> >
> >
> > dave
> >
> >
> > "Pat" <(E-Mail Removed)> wrote in message

> >
> >>Give two double-typed variable X and Y.
> >>
> >>If (X==Y) is true,
> >>
> >>then how about the following results:
> >>(float(X) > float(Y))?
> >>(float(X) < float(Y))?
> >>(float(X) >= float(Y))?
> >>( X > float(Y) )?
> >>( X < float(Y) )?
> >>( X == float(Y) )?
> >>
> >>Will the results be independent of compliers and OS platforms?
> >>
> >>Thanks. Pat
> >>
> >>

> >
> >
> >

David Logan
Guest
Posts: n/a

 05-21-2004
Pat wrote:
> Give two double-typed variable X and Y.
>
> If (X==Y) is true,
>
> then how about the following results:
> (float(X) > float(Y))?
> (float(X) < float(Y))?
> (float(X) >= float(Y))?
> ( X > float(Y) )?
> ( X < float(Y) )?
> ( X == float(Y) )?
>
> Will the results be independent of compliers and OS platforms?
>
> Thanks. Pat
>
>

No, they will not be independent of compilers, nor of OS platforms.
Floating point numbers, the underlying machine instructions and
registers that manage them are different. You will get subtle
differences, especially as you increase in precision. We have trouble on
a regular basis with floating point numbers in our software, compounded
when we port to different platforms.

Floating point numbers are good to use in some situations, but you
REALLY want to avoid comparing them whenever possible.

David Logan