Bug#175809: Strange or incorrect floating point behaviour
Daniel, should this report be closed?
Daniel Jacobowitz writes:
> On Fri, Jan 10, 2003 at 11:58:33AM +0100, Gerhard Wesp wrote:
> > > Do you get the expected results if you do this?
> >
> > Yes and no.
> >
> > I include a modified example.
> >
> > The assertion fails if compiled with -O3 -ffloat-store -DA, it doesn't
> > if compiled without the -DA. So it seems to depend on where the
> > assignments take place.
>
> > #if defined( A )
> > double ku ;
> > double kx ;
> > assert( ( ku = 2.5 * u ) >= ( kx = 2.5 * x ) ) ; // fails.
> > #else
> > double ku = 2.5 * x ;
> > double kx = 2.5 * u ;
> > assert( ku >= kx ) ; // doesn't fail.
> > #endif
>
> Yup, that's C for you. The former uses the value of 2.5*u, the latter
> uses the value of ku. You can see how this works by declaring ku
> volatile and looking at the assembly; it'll be reloaded in the second
> case but not the first.
Reply to: