delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/1998/11/09/04:49:48

From: Kabal AT ece DOT mcgill DOT ca (Peter Kabal)
Subject: cygwin-b20 gcc: "A - floor(A)" returns a negative value
9 Nov 1998 04:49:48 -0800 :
Message-ID: <000001be0b8a$16397810$f445ce84.cygnus.gnu-win32@ECE.McGill.CA>
Mime-Version: 1.0
To: <gnu-win32 AT cygnus DOT com>

Switching from cygwin-b19 to cygwin-b20 caused a C-routine to give
incorrect results.  This was traced to a calculation (in double) of
"A - float(A)" which returns a negative value.  By definition it should
always be positive.  A short test program which demonstrates this
problem is included.  If the program is further simplified, the problem
goes away.  To exercise the bug, the program must be compiled with
optimization level -O3.

% gcc -O3 tfloor.c -o tfloor
% ./tfloor
AV = 20, AV - floor(AV) = -1.11022e-15

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

int
main (argc, argv)
     int argc;
     char *argv[];
{
  double AV;

  AV = 0.05;
  AV = 1.0 / (AV - floor (AV));
  printf ("AV = %g, AV - floor(AV) = %g\n", AV, AV - floor(AV));

  return 0;
};
----------------
Peter Kabal    kabal AT ECE DOT McGill DOT CA
Dept. Electrical & Computer Engineering
McGill University
-
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