From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by sourceware.org (Postfix) with ESMTPS id F14583858291 for ; Mon, 27 Feb 2023 16:35:27 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org F14583858291 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=inria.fr Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=inria.fr DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=inria.fr; s=dc; h=date:message-id:from:to:cc:subject; bh=IW+d7uFT8z+FnD1HjtM29qG6uolqpmYtx43hmXxuiic=; b=vbJS9WLbP8xRMyScq2b7GntREBhn3gXZbAYwHVuJ4gZGNTus62im8Br+ +2zcfva7xX8KazfSaYrld2/XTegroE1SEQkDaNIWynJVmNYCWR1CiqZvx azb/zHZjt7keck59Lw/ju2LLepdy5gX7nE3OE69SQ9bUD1UDlprjH+iDg A=; Authentication-Results: mail2-relais-roc.national.inria.fr; dkim=none (message not signed) header.i=none; spf=SoftFail smtp.mailfrom=Paul.Zimmermann@inria.fr; spf=None smtp.helo=postmaster@coriandre Received-SPF: SoftFail (mail2-relais-roc.national.inria.fr: domain of Paul.Zimmermann@inria.fr is inclined to not designate 152.81.9.227 as permitted sender) identity=mailfrom; client-ip=152.81.9.227; receiver=mail2-relais-roc.national.inria.fr; envelope-from="Paul.Zimmermann@inria.fr"; x-sender="Paul.Zimmermann@inria.fr"; x-conformance=spf_only; x-record-type="v=spf1"; x-record-text="v=spf1 ip4:128.93.142.0/24 ip4:192.134.164.0/24 ip4:128.93.162.160 ip4:89.107.174.7 mx ~all" Received-SPF: None (mail2-relais-roc.national.inria.fr: no sender authenticity information available from domain of postmaster@coriandre) identity=helo; client-ip=152.81.9.227; receiver=mail2-relais-roc.national.inria.fr; envelope-from="Paul.Zimmermann@inria.fr"; x-sender="postmaster@coriandre"; x-conformance=spf_only X-IronPort-AV: E=Sophos;i="5.98,219,1673910000"; d="scan'208";a="94570561" Received: from coriandre.loria.fr (HELO coriandre) ([152.81.9.227]) by mail2-relais-roc.national.inria.fr with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Feb 2023 17:35:26 +0100 Date: Mon, 27 Feb 2023 17:35:26 +0100 Message-Id: From: Paul Zimmermann To: newlib@sourceware.org CC: tydeman@tybor.com Subject: ldexp with directed rounding X-Spam-Status: No, score=-2.9 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Hi, it seems that Newlib does not honor the rounding mode for ldexp(0x1p-1074,-1): for rounding updwards it should return 0x1p-1074 and not 0. Test program: #include #include #include int main() { volatile double x = 1.0, y; while (x * 0.5 != 0) x = x * 0.5; fesetround (FE_TONEAREST); y = ldexp (x, -1); printf ("FE_TONEAREST: y=%la\n", y); fesetround (FE_TOWARDZERO); y = ldexp (x, -1); printf ("FE_TOWARDZERO: y=%la\n", y); fesetround (FE_UPWARD); y = ldexp (x, -1); printf ("FE_UPWARD: y=%la\n", y); fesetround (FE_DOWNWARD); y = ldexp (x, -1); printf ("FE_DOWNWARD: y=%la\n", y); } With newlib-4.3.0.20230120 on x86_64: zimmerma@salade:~/svn/tbd/20/src/binary64$ gcc -fno-builtin check_ldexp.c /localdisk/zimmerma/${NEWLIB}/libm.a zimmerma@salade:~/svn/tbd/20/src/binary64$ ./a.out FE_TONEAREST: y=0x0p+0 FE_TOWARDZERO: y=0x0p+0 FE_UPWARD: y=0x0p+0 FE_DOWNWARD: y=0x0p+0 With GNU libc: zimmerma@salade:~/svn/tbd/20/src/binary64$ gcc -fno-builtin check_ldexp.c -lm zimmerma@salade:~/svn/tbd/20/src/binary64$ ./a.out FE_TONEAREST: y=0x0p+0 FE_TOWARDZERO: y=0x0p+0 FE_UPWARD: y=0x0.0000000000001p-1022 FE_DOWNWARD: y=0x0p+0 This test was suggested by Fred Tydeman. Paul