Subject: Bug with beta-16, floating point, and the optimizer
From: [email-masked] (Jeff Deifik)

6 Nov 1996 19:22:15 -0800
Sender: [email-masked]
Approved: [email-masked]
Distribution: cygnus
Message-ID: <[email-masked]>
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="=====================_847358643==_"
X-Sender: [email-masked]
X-Mailer: Windows Eudora Pro Version 2.2 (32)
Original-To: [email-masked]
X-Attachments: D:\j\lib\y.c;
Original-Sender: [email-masked]

--=====================_847358643==_
Content-Type: text/plain; charset="us-ascii"

The small, attached program demonstrates a bug with beta-16 gcc.
If the optimizer is set to '-O' the program executes correctly.
If the optimizer is set to '-O2' or '-O3' the program generates an exception.
This is on a pentium 120, running windows nt-4.0 server, with service patch 1.
I have a fresh install of beta-16, with no old files lingering around.
I have specified gcc_exec_prefix, and I have a /tmp directory...

        Jeff Deifik     [email-masked]      [email-masked]

--=====================_847358643==_
Content-Type: text/plain; charset="us-ascii"

/* y.c, demonstrates a bug with gnu-w32 beta 16 and the optimizer... */
/*
To produce an exception say:
   gcc -O2 -g -c y.c -o y.o
   gcc y.o -lm -o yyy.exe
   yyy

To produce no exception say:
   gcc -O -g -c y.c -o y.o
   gcc y.o -lm -o yyy.exe
   yyy

*/
/* Written 11/06/96 by Jeff Deifik	*/

#include	<stdio.h>
#include	<math.h>

typedef enum { False = 0, True = 1 } Boolean;

float FLOAT_TO_ROUNDED_FLOAT(float);
int flo_close(double value,double f,double clo);

int main(int argc, char *argv[])
{
Boolean	fail = False;
double	d;
float	f;

    d = rint(47);
    if (!flo_close(47.0f,d,0.0001f))
      { (void)printf("47 %f\n",d); fail = True; }

    f = FLOAT_TO_ROUNDED_FLOAT(47.0);
    if (!flo_close(47.0f,f,0.0001f))
      { (void)printf("47 %f\n",f); fail = True; }

    return 1;
}

/* Value is the ideal number, f is what it really is.*/
int	flo_close(double value,double f,double clo)
{
    return(((f+clo) >= value) && ((f-clo) <= value));
}

float	FLOAT_TO_ROUNDED_FLOAT(float x)		{ return(floor(x+0.5)); }

--=====================_847358643==_--

-
For help on using this list, send a message to
"[email-masked]" with one line of text: "help".