From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30376 invoked by alias); 4 Jan 2002 19:06:01 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 30338 invoked by uid 71); 4 Jan 2002 19:06:00 -0000 Resent-Date: 4 Jan 2002 19:06:00 -0000 Resent-Message-ID: <20020104190600.30337.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-To: nobody@gcc.gnu.org Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, long@stsci.edu Received:(qmail 28408 invoked by uid 61); 4 Jan 2002 19:02:05 -0000 Message-Id:<20020104190205.28407.qmail@sources.redhat.com> Date: Fri, 04 Jan 2002 11:06:00 -0000 From: long@stsci.edu Reply-To: long@stsci.edu To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version:gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c/5277: NaN unexpectedly X-SW-Source: 2002-01/txt/msg00164.txt.bz2 List-Id: >Number: 5277 >Category: c >Synopsis: NaN unexpectedly >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Fri Jan 04 11:06:00 PST 2002 >Closed-Date: >Last-Modified: >Originator: Knox S. Long >Release: gcc-2.96-81 >Organization: >Environment: Redhat 7.1 (on a Dell Dimension 1 Ghz machine) glibc-2.2.4-19.3 >Description: I am seeing a problem in which simple double precision math occasionally generates NAN problems. The probalem is odd because if on printf's the offending variable, and reprints the result, the NAN problem goes away Here is an example code fragement where this can occur. double thierry_velocity (x, v) double x[]; double v[]; { int n; double r, speed; double frac,z; double length (); z=x[0]*x[0]+x[1]*x[1]+x[2]*x[2]; if(sane_check(z)){ printf("%f\n",z); z=x[0]*x[0]+x[1]*x[1]+x[2]*x[2]; printf("%f\n",z); } r = length (x); ... where sane_check simply checks to see whether x is finite, e.g. int sane_check (x) double x; { int i; if ((i = finite (x)) == 0) { Error ("sane_check: %d %e\n", i, x); return (-1); } return (0); } There was some discussion of a similar problem on the web associated with gcc 2.95.1. and even a reference to a bug report which I could not locate. I ran the identical program on a Sun (with gcc 2.95) and did not see the problem. >How-To-Repeat: >Fix: >Release-Note: >Audit-Trail: >Unformatted: