delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/1997/04/22/18:15:04

From: noer AT cygnus DOT com (Geoffrey Noer)
Subject: Re: Bug with beta-16, floating point, and the optimizer
22 Apr 1997 18:15:04 -0700 :
Approved: cygnus DOT gnu-win32 AT cygnus DOT com
Distribution: cygnus
Message-ID: <199704221843.LAA06787.cygnus.gnu-win32@cirdan.cygnus.com>
Original-To: jdeifik AT weasel DOT com (Jeff Deifik)
Original-Cc: gnu-win32 AT cygnus DOT com
In-Reply-To: <2.2.32.19961107012403.00e21c24@pop.ni.net> from "Jeff Deifik" at Nov 6, 96 05:24:03 pm
X-Mailer: ELM [version 2.4 PL23]
Original-Sender: owner-gnu-win32 AT cygnus DOT com

Your test case works fine under upcoming beta 18...

-- 
Geoffrey Noer
noer AT cygnus DOT com

> 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.
>
>         Jeff Deifik     jdeifik AT weasel DOT com      turbo AT weasel DOT com
> 
> /* 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)); }


-
For help on using this list (especially unsubscribing), send a message to
"gnu-win32-request AT cygnus DOT com" with one line of text: "help".

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019