From owner-freebsd-bugs Tue Aug 20 10:42:14 2002 Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 7B5F437B400 for ; Tue, 20 Aug 2002 10:42:11 -0700 (PDT) Received: from freefall.freebsd.org (freefall.FreeBSD.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id CD77543E84 for ; Tue, 20 Aug 2002 10:42:10 -0700 (PDT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.12.4/8.12.4) with ESMTP id g7KHfvJU080994 for ; Tue, 20 Aug 2002 10:41:57 -0700 (PDT) (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.12.4/8.12.4/Submit) id g7KHffec080988; Tue, 20 Aug 2002 10:41:41 -0700 (PDT) Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 7D45937B400 for ; Tue, 20 Aug 2002 10:32:56 -0700 (PDT) Received: from www.freebsd.org (www.FreeBSD.org [216.136.204.117]) by mx1.FreeBSD.org (Postfix) with ESMTP id 3F70143E42 for ; Tue, 20 Aug 2002 10:32:56 -0700 (PDT) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (localhost [127.0.0.1]) by www.freebsd.org (8.12.4/8.12.4) with ESMTP id g7KHWtOT034153 for ; Tue, 20 Aug 2002 10:32:55 -0700 (PDT) (envelope-from nobody@www.freebsd.org) Received: (from nobody@localhost) by www.freebsd.org (8.12.4/8.12.4/Submit) id g7KHWtKV034152; Tue, 20 Aug 2002 10:32:55 -0700 (PDT) Message-Id: <200208201732.g7KHWtKV034152@www.freebsd.org> Date: Tue, 20 Aug 2002 10:32:55 -0700 (PDT) From: GOTO Kentaro To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-1.0 Subject: bin/41823: printf("%+f\n", -0.0) generates +0.000000 Sender: owner-freebsd-bugs@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.org >Number: 41823 >Category: bin >Synopsis: printf("%+f\n", -0.0) generates +0.000000 >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Tue Aug 20 10:40:28 PDT 2002 >Closed-Date: >Last-Modified: >Originator: GOTO Kentaro >Release: STABLE and CURRENT >Organization: >Environment: FreeBSD 5.0-CURRENT i386 >Description: vfprintf() generates a wrong "+" sign for a floating point number minus zero, i.e., -0.0, when +[eEfgG] is specified in the format. >How-To-Repeat: % echo 'main(){printf("%+f\\n", -0.0);}' | /usr/bin/cc -xc - && ./a.out +0.000000 >Fix: How about Checking sign bit instead of `< 0'. For example, NetBSD's /usr/src/lib/libc/stdio/vfprintf.c:cvt() does digits = __dtoa(value, mode, ndigits, decpt, &dsgn, &rve); if (dsgn) { value = -value; *sign = '-'; } else *sign = '\000'; But FreeBSD's does if (value < 0) { value = -value; *sign = '-'; } else *sign = '\000'; This test does not work in this case because IEEE754 defines the truth value of -ZERO < ZERO as FALSE. >Release-Note: >Audit-Trail: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message