From patchwork Thu Jan 7 19:25:13 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wilco Dijkstra X-Patchwork-Id: 41669 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 453B93850407; Thu, 7 Jan 2021 19:25:31 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 453B93850407 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1610047531; bh=4qTBv0+j18DciX/mfCb/3Hutk3sF0q98om7hxYM9an8=; h=To:Subject:Date:References:In-Reply-To:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=iyR6T0FVsyFCVk1ESD5h4CdztpA5k8v95zx3cJgoeSljgTnlhfDf/NlD9RjKgf3jv MVVZ5CXX/fiQn6h7Gz+aUXalNbDUQwLG5wVRAMd83hbuaNDrjWJZUcRG0ApurxZtrG B3TDR7ql6j6hOoTbeT94Xpb3th7VeNQSecpwtglQ= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2045.outbound.protection.outlook.com [40.107.21.45]) by sourceware.org (Postfix) with ESMTPS id 9B9603854802 for ; Thu, 7 Jan 2021 19:25:25 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 9B9603854802 Received: from DB6PR0601CA0025.eurprd06.prod.outlook.com (2603:10a6:4:17::11) by AM5PR0802MB2465.eurprd08.prod.outlook.com (2603:10a6:203:9f::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3721.23; Thu, 7 Jan 2021 19:25:22 +0000 Received: from DB5EUR03FT063.eop-EUR03.prod.protection.outlook.com (2603:10a6:4:17:cafe::4b) by DB6PR0601CA0025.outlook.office365.com (2603:10a6:4:17::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3742.6 via Frontend Transport; Thu, 7 Jan 2021 19:25:22 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; sourceware.org; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;sourceware.org; dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by DB5EUR03FT063.mail.protection.outlook.com (10.152.20.209) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3742.6 via Frontend Transport; Thu, 7 Jan 2021 19:25:22 +0000 Received: ("Tessian outbound 39646a0fd094:v71"); Thu, 07 Jan 2021 19:25:22 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: f5433f478c8ecbb4 X-CR-MTA-TID: 64aa7808 Received: from d60ed4a63024.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 18E6BA61-73C1-4B95-981E-992E3E150346.1; Thu, 07 Jan 2021 19:25:16 +0000 Received: from EUR04-VI1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id d60ed4a63024.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Thu, 07 Jan 2021 19:25:16 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gkG+0JYUdwOaGVD1wOq1C8o2sJM73Qiq9AUcEnp2mL9OSfvkZqRzhnodfQpi71Z7k++WpXToK8zf53LXeQwKaq3VVxf5a3ZNZXIvZMQ4VGZ0kQWgriZWf5WP2oXkPqQfuxP0Us1H05KnlTvEgz4SKByrSprQxt9AwjDvbSJdJZ6Azg4LGnf3He7ZRySsN56y8RSbgB1Mewai7zAtgjQjp0ME1kJnDV1U+iEoW+K0O9SGohHoAHPZZlI0nhr2nRGjzHq99w2xrLZbc0a9Sy3s0MnptO3QwvbU1c6PGpldCdcL8w96BzdO+6/kcfh75IWxSCuYPNW51fU1rVn1RL9BxQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=4qTBv0+j18DciX/mfCb/3Hutk3sF0q98om7hxYM9an8=; b=TTnv6xT2hAV/BXorb5LFNonIsYJcT+S5ANBMW/b9vEUYMPA65qajy+fyQ1XRdxbJPE82CpUg6A6p2daSX3uW/9dw4U5Kxsj+toeanckhsBS9mogV5IbESkzbgjY4ca+kkZgvYSwoCKwrayntobkYTcfpok58Oojcr/4Ij7WWyv6HGK7eQTNgBgkyhlfeW1SixqtRI/dtEMkoKOhvN9goUDg+zKimVMyPb9qxbT6spm8YTfg8L5JO4Ah3QuaeTeXqcAbnw88e+vtZUOqYhW5FKdmxb7VxEz6xcWZk3dhWVMEcsRBmv4TRFK1/GOEBzBFhgTH94Mhh2ZEeICdeo+z4OQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none Received: from VE1PR08MB5599.eurprd08.prod.outlook.com (2603:10a6:800:1a1::12) by VI1PR0801MB1760.eurprd08.prod.outlook.com (2603:10a6:800:51::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3721.21; Thu, 7 Jan 2021 19:25:13 +0000 Received: from VE1PR08MB5599.eurprd08.prod.outlook.com ([fe80::6d00:2694:e0d7:986f]) by VE1PR08MB5599.eurprd08.prod.outlook.com ([fe80::6d00:2694:e0d7:986f%5]) with mapi id 15.20.3742.006; Thu, 7 Jan 2021 19:25:13 +0000 To: 'GNU C Library' Subject: [PATCH v2 2/5] Remove slow paths in tan Thread-Topic: [PATCH v2 2/5] Remove slow paths in tan Thread-Index: AQHW5SrSGhDw9bY2lE24TXKBXw7lNA== Date: Thu, 7 Jan 2021 19:25:13 +0000 Message-ID: References: , In-Reply-To: Accept-Language: en-GB, en-US Content-Language: en-GB X-MS-Has-Attach: X-MS-TNEF-Correlator: Authentication-Results-Original: sourceware.org; dkim=none (message not signed) header.d=none;sourceware.org; dmarc=none action=none header.from=arm.com; x-originating-ip: [82.24.249.100] x-ms-publictraffictype: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 6b495fbb-f55b-40d7-4a15-08d8b341fa08 x-ms-traffictypediagnostic: VI1PR0801MB1760:|AM5PR0802MB2465: X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true nodisclaimer: true x-ms-oob-tlc-oobclassifiers: OLM:127;OLM:127; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: ynP03z4e/Nhl/U2jY96jyT8xDH/G4QEEXr4Pgi6LmfEdftUSlcbtIhntZWKy62tEjapQXRp1rOmriUc/cXKe1u6gle5d7om3s7HGukP3APIU4Hi3qUaN28kNcBVMFnQbxtcahWNPvxzzJBE/vvftGPhyfrd5ISQ2Y5UG81DZZmnzcHovFHKPPcQ0esGFXlObOuRVHTKvTPn13tVh+Db9aGLQBeRHyxGOVtHckj6JHGG5u+8986HKQw4QaoVDzmKiV21JWdaMAhX8jjvQ51KKxpCBRmsRKXttt72SUBmS454/JirYADy5CM8G2FMhejt5mn5eVv2rlfTMeKjbHHorNr81Gef4f9hXbEGuo9ilLwXo5AUe0z9uDWSG7idTYsdM10QpAZPP0DLN9e1/mpIrIA== X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VE1PR08MB5599.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(396003)(136003)(346002)(376002)(366004)(39860400002)(83380400001)(6916009)(7696005)(26005)(33656002)(478600001)(55016002)(316002)(71200400001)(8936002)(30864003)(5660300002)(6506007)(9686003)(76116006)(86362001)(8676002)(186003)(66446008)(2906002)(66946007)(66556008)(64756008)(66476007)(52536014)(559001)(579004); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata: =?iso-8859-1?q?rMUrLKVhPY1EcwGIDMDKZNb0l?= =?iso-8859-1?q?zesVdMXQHebYK1ow84T2wsKT+Vlvx8gHhVMBeQUrH0x2LKHOR3E/7+eTlS69?= =?iso-8859-1?q?D7E332LPBiv07Qa4zcj/7CK1iPcNioPGxytTk2kkMW4xowQZRgdwwqugJsCZ?= =?iso-8859-1?q?im3dnd95A9kVXxgg+irOYLMxj8R3VkcgeWfjC8UowUW3qIgHwSTP8WfFXFBp?= =?iso-8859-1?q?mc6YGT5jVa5VSa3iwUXVvSi0Ojug0j3sSsdoHU6n7FnK3fN7Z8GgEggEqMCF?= =?iso-8859-1?q?phPmNMu7PfjUJApTN558lEJO5Tn7m7HLggg9Iq53IPSGWzjE6i3UOyvlDoA+?= =?iso-8859-1?q?c+CAV6R1xcjacFzlvj5fX5BuZR9p0ERKVGGpBtpZFp7b7yS6F/bIkKp8CNl5?= =?iso-8859-1?q?+ZSHR07SK1FpNbzNfB2mzICtYhR8fG7uEquf46Yjpj78YhaU0sSqkPpPeKM4?= =?iso-8859-1?q?8WzAYKTUZc8JdHTwVfEgTyo/91g98pyUOohlNacOj+3aYn4nrPZGtFs+91jL?= =?iso-8859-1?q?iiqkO2toooBfR84RhtDdnBgA6/+23dnjV59CJPRNiMAn3U2cToVnIwvj0FCJ?= =?iso-8859-1?q?CHery/mLKm33RjGrrmkzcGlrzhIGfvd9PKOLapN+FE0cyGt1qSHd8dczAZ5l?= =?iso-8859-1?q?A087wz0bosgtdyglM0uAK6X7mE9IWY6KsUv7zK6ZEBEekbS2pT3KNioFC/rN?= =?iso-8859-1?q?8yZK2k7zQD1JqElohiZx3AcnMlmV5NqseWMkOrpgB5zlwgCNYZ4NZk21/YKR?= =?iso-8859-1?q?Jl6hw8ZNhSv2O1KVaplKwWX1XCQcKpF8IeqU+YxKWip1XgPvlXuLs7gHtboQ?= =?iso-8859-1?q?Awv9s7hPvg+WqmoWTrXPud/tePlv9//nfawc1iHQC+GQpH8/XObfpgrZDpzA?= =?iso-8859-1?q?YshsxvG2X6xIBveJj1cai7II/fcIhHSfrBADlf2kIGZLLsRNNve/8XdML8+v?= =?iso-8859-1?q?z6ohutjoULgaH3xaZexdZC/lLYr+yw/t1czUU++K+USg46azxocGsKJcLZyb?= =?iso-8859-1?q?62eUHp7n5/5RUt0oCk=3D?= x-ms-exchange-transport-forked: True MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0801MB1760 Original-Authentication-Results: sourceware.org; dkim=none (message not signed) header.d=none; sourceware.org; dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB5EUR03FT063.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: 971fafd3-e76a-4972-60fa-08d8b341f514 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: FZqSigGJC4mwnsovbGzGXrZNTVojvjSwvEAxKHmY9AR94HH+1i7yPpncnUjd0VzyGXjf4hNbjcMgYuepviGtG62ve3i7IO+xLqztFwkonbsU1kAv1sC+c7WKepyn3+yLoShEyI+5BdYQnlMJ8ZBwSWw2mfGfVmrfX9P1jCDqo3aIfOau6V5HGC9ei5FHkPO8orNXtlZsuEUE08XMjCba9UHQSssol3JfUd6A6o0I++9iEvh1Z7/f9DfoDBnYI+CFVBUamHwIw/BTCm3D/3wsN4jv7Q3+JHtnbOXXk9hMIOJtqwU72KnYaE2lMvI0kHQZ9/MAYB5cp+PInKdgf/7Vq8MgghsOMtxK7jdNfk97uOzE6OWArsuFn7sRwz7Oh7NeEVFglx9m+w9M1izAZjhPVdKFtw5cCCz66brKeR/Px2pl8sz95V/deqy7dSMWCmHkOXY8l2a3qJiOhhrY3BW+B6JAPIszyPWrX3WR4jVBBcjTSMu7scEeS5XNtimNXhw4 X-Forefront-Antispam-Report: CIP:63.35.35.123; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:64aa7808-outbound-1.mta.getcheckrecipient.com; PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; CAT:NONE; SFS:(4636009)(136003)(39850400004)(346002)(376002)(396003)(46966006)(186003)(356005)(82310400003)(47076005)(34020700004)(33656002)(70206006)(6506007)(9686003)(6916009)(7696005)(83380400001)(81166007)(2906002)(70586007)(8936002)(86362001)(316002)(52536014)(30864003)(478600001)(26005)(336012)(5660300002)(8676002)(82740400003)(55016002); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jan 2021 19:25:22.1938 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 6b495fbb-f55b-40d7-4a15-08d8b341fa08 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123]; Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: DB5EUR03FT063.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0802MB2465 X-Spam-Status: No, score=-11.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, KAM_LOTSOFHASH, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SCC_10_SHORT_WORD_LINES, SCC_5_SHORT_WORD_LINES, SPF_HELO_PASS, SPF_PASS, TXREP, UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Wilco Dijkstra via Libc-alpha From: Wilco Dijkstra Reply-To: Wilco Dijkstra Errors-To: libc-alpha-bounces@sourceware.org Sender: "Libc-alpha" Remove slow paths in tan. Add ULP annotations. Merge 'number' into 'mynumber'. Remove unused entries from tan constants. Passes GLIBC testsuite. diff --git a/sysdeps/ieee754/dbl-64/e_atan2.c b/sysdeps/ieee754/dbl-64/e_atan2.c index b14d911ebf97a7ded32fdad635d0bbe33cc21036..e6b98142fbbc7c6bd4a51df0257b361fa46181ec 100644 --- a/sysdeps/ieee754/dbl-64/e_atan2.c +++ b/sysdeps/ieee754/dbl-64/e_atan2.c @@ -39,6 +39,7 @@ #include #include "mpa.h" #include "MathLib.h" +#include "mydefs.h" #include "uatan.tbl" #include "atnat2.h" #include diff --git a/sysdeps/ieee754/dbl-64/mydefs.h b/sysdeps/ieee754/dbl-64/mydefs.h index cdbcabf8a70dd96474f17fd9c881c9a77fab0d70..a73c4de2c16a47bc65111cc59a1060020cc04b47 100644 --- a/sysdeps/ieee754/dbl-64/mydefs.h +++ b/sysdeps/ieee754/dbl-64/mydefs.h @@ -28,7 +28,7 @@ #define MY_H typedef int int4; -typedef union { int4 i[2]; double x; } mynumber; +typedef union { int4 i[2]; double x; double d; } mynumber; #define max(x, y) (((y) > (x)) ? (y) : (x)) #define min(x, y) (((y) < (x)) ? (y) : (x)) diff --git a/sysdeps/ieee754/dbl-64/s_tan.c b/sysdeps/ieee754/dbl-64/s_tan.c index 6aa5a5a8e3d6d12b3c0f22f082c360a099e009b0..0d4bb7143704f8a425ebd4d6b72ba1645814ae9c 100644 --- a/sysdeps/ieee754/dbl-64/s_tan.c +++ b/sysdeps/ieee754/dbl-64/s_tan.c @@ -20,40 +20,30 @@ /* MODULE_NAME: utan.c */ /* */ /* FUNCTIONS: utan */ -/* tanMp */ /* */ -/* FILES NEEDED:dla.h endian.h mpa.h mydefs.h utan.h */ -/* branred.c sincos32.c mptan.c */ +/* FILES NEEDED:dla.h endian.h mydefs.h utan.h */ +/* branred.c */ /* utan.tbl */ /* */ -/* An ultimate tan routine. Given an IEEE double machine number x */ -/* it computes the correctly rounded (to nearest) value of tan(x). */ -/* Assumption: Machine arithmetic operations are performed in */ -/* round to nearest mode of IEEE 754 standard. */ -/* */ /*********************************************************************/ #include #include #include "endian.h" #include -#include "mpa.h" -#include "MathLib.h" +#include "mydefs.h" #include #include #include #include #include #include -#include #ifndef SECTION # define SECTION #endif -static double tanMp (double); -void __mptan (double, mp_no *, int); - +/* tan with max ULP of ~0.612 based on random sampling. */ double SECTION __tan (double x) @@ -62,17 +52,14 @@ __tan (double x) #include "utan.tbl" int ux, i, n; - double a, da, a2, b, db, c, dc, c1, cc1, c2, cc2, c3, cc3, fi, ffi, gi, pz, - s, sy, t, t1, t2, t3, t4, w, x2, xn, xx2, y, ya, - yya, z0, z, zz, z2, zz2; - int p; - number num, v; - mp_no mpa, mpt1, mpt2; + double a, da, a2, b, db, c, dc, fi, gi, pz, + s, sy, t, t1, t2, t3, t4, w, x2, xn, y, ya, + yya, z0, z, z2; + mynumber num, v; double retval; int __branred (double, double *, double *); - int __mpranred (double, mp_no *, int); SET_RESTORE_ROUND_53BIT (FE_TONEAREST); @@ -100,7 +87,6 @@ __tan (double x) /* (II) The case 1.259e-8 < abs(x) <= 0.0608 */ if (w <= g2.d) { - /* First stage */ x2 = x * x; t2 = d9.d + x2 * d11.d; @@ -109,50 +95,16 @@ __tan (double x) t2 = d3.d + x2 * t2; t2 *= x * x2; - if ((y = x + (t2 - u1.d * t2)) == x + (t2 + u1.d * t2)) - { - retval = y; - goto ret; - } - - /* Second stage */ - c1 = a25.d + x2 * a27.d; - c1 = a23.d + x2 * c1; - c1 = a21.d + x2 * c1; - c1 = a19.d + x2 * c1; - c1 = a17.d + x2 * c1; - c1 = a15.d + x2 * c1; - c1 *= x2; - - EMULV (x, x, x2, xx2); - ADD2 (a13.d, aa13.d, c1, 0.0, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2); - ADD2 (a11.d, aa11.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2); - ADD2 (a9.d, aa9.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2); - ADD2 (a7.d, aa7.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2); - ADD2 (a5.d, aa5.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2); - ADD2 (a3.d, aa3.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2); - MUL2 (x, 0.0, c1, cc1, c2, cc2, t1, t2); - ADD2 (x, 0.0, c2, cc2, c1, cc1, t1, t2); - if ((y = c1 + (cc1 - u2.d * c1)) == c1 + (cc1 + u2.d * c1)) - { - retval = y; - goto ret; - } - retval = tanMp (x); + y = x + t2; + retval = y; + /* Max ULP is 0.504. */ goto ret; } /* (III) The case 0.0608 < abs(x) <= 0.787 */ if (w <= g3.d) { - /* First stage */ - i = ((int) (mfftnhf.d + TWO8 * w)); + i = ((int) (mfftnhf.d + 256 * w)); z = w - xfg[i][0].d; z2 = z * z; s = (x < 0.0) ? -1 : 1; @@ -160,41 +112,9 @@ __tan (double x) fi = xfg[i][1].d; gi = xfg[i][2].d; t2 = pz * (gi + fi) / (gi - pz); - if ((y = fi + (t2 - fi * u3.d)) == fi + (t2 + fi * u3.d)) - { - retval = (s * y); - goto ret; - } - t3 = (t2 < 0.0) ? -t2 : t2; - t4 = fi * ua3.d + t3 * ub3.d; - if ((y = fi + (t2 - t4)) == fi + (t2 + t4)) - { - retval = (s * y); - goto ret; - } - - /* Second stage */ - ffi = xfg[i][3].d; - c1 = z2 * (a7.d + z2 * (a9.d + z2 * a11.d)); - EMULV (z, z, z2, zz2); - ADD2 (a5.d, aa5.d, c1, 0.0, c2, cc2, t1, t2); - MUL2 (z2, zz2, c2, cc2, c1, cc1, t1, t2); - ADD2 (a3.d, aa3.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (z2, zz2, c2, cc2, c1, cc1, t1, t2); - MUL2 (z, 0.0, c1, cc1, c2, cc2, t1, t2); - ADD2 (z, 0.0, c2, cc2, c1, cc1, t1, t2); - - ADD2 (fi, ffi, c1, cc1, c2, cc2, t1, t2); - MUL2 (fi, ffi, c1, cc1, c3, cc3, t1, t2); - SUB2 (1.0, 0.0, c3, cc3, c1, cc1, t1, t2); - DIV2 (c2, cc2, c1, cc1, c3, cc3, t1, t2, t3, t4); - - if ((y = c3 + (cc3 - u4.d * c3)) == c3 + (cc3 + u4.d * c3)) - { - retval = (s * y); - goto ret; - } - retval = tanMp (x); + y = fi + t2; + retval = (s * y); + /* Max ULP is 0.60. */ goto ret; } @@ -223,14 +143,7 @@ __tan (double x) sy = 1; } - /* (IV),(V) The case 0.787 < abs(x) <= 25, abs(y) <= 1e-7 */ - if (ya <= gy1.d) - { - retval = tanMp (x); - goto ret; - } - - /* (VI) The case 0.787 < abs(x) <= 25, 1e-7 < abs(y) <= 0.0608 */ + /* (VI) The case 0.787 < abs(x) <= 25, 0 < abs(y) <= 0.0608 */ if (ya <= gy2.d) { a2 = a * a; @@ -242,94 +155,27 @@ __tan (double x) if (n) { - /* First stage -cot */ + /* -cot */ EADD (a, t2, b, db); DIV2 (1.0, 0.0, b, db, c, dc, t1, t2, t3, t4); - if ((y = c + (dc - u6.d * c)) == c + (dc + u6.d * c)) - { - retval = (-y); - goto ret; - } - } - else - { - /* First stage tan */ - if ((y = a + (t2 - u5.d * a)) == a + (t2 + u5.d * a)) - { - retval = y; - goto ret; - } - } - /* Second stage */ - /* Range reduction by algorithm ii */ - t = (x * hpinv.d + toint.d); - xn = t - toint.d; - v.d = t; - t1 = (x - xn * mp1.d) - xn * mp2.d; - n = v.i[LOW_HALF] & 0x00000001; - da = xn * pp3.d; - t = t1 - da; - da = (t1 - t) - da; - t1 = xn * pp4.d; - a = t - t1; - da = ((t - a) - t1) + da; - - /* Second stage */ - EADD (a, da, t1, t2); - a = t1; - da = t2; - MUL2 (a, da, a, da, x2, xx2, t1, t2); - - c1 = a25.d + x2 * a27.d; - c1 = a23.d + x2 * c1; - c1 = a21.d + x2 * c1; - c1 = a19.d + x2 * c1; - c1 = a17.d + x2 * c1; - c1 = a15.d + x2 * c1; - c1 *= x2; - - ADD2 (a13.d, aa13.d, c1, 0.0, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2); - ADD2 (a11.d, aa11.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2); - ADD2 (a9.d, aa9.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2); - ADD2 (a7.d, aa7.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2); - ADD2 (a5.d, aa5.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2); - ADD2 (a3.d, aa3.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2); - MUL2 (a, da, c1, cc1, c2, cc2, t1, t2); - ADD2 (a, da, c2, cc2, c1, cc1, t1, t2); - - if (n) - { - /* Second stage -cot */ - DIV2 (1.0, 0.0, c1, cc1, c2, cc2, t1, t2, t3, t4); - if ((y = c2 + (cc2 - u8.d * c2)) == c2 + (cc2 + u8.d * c2)) - { - retval = (-y); - goto ret; - } + y = c + dc; + retval = (-y); + /* Max ULP is 0.506. */ + goto ret; } else { - /* Second stage tan */ - if ((y = c1 + (cc1 - u7.d * c1)) == c1 + (cc1 + u7.d * c1)) - { - retval = y; - goto ret; - } + /* tan */ + y = a + t2; + retval = y; + /* Max ULP is 0.506. */ + goto ret; } - retval = tanMp (x); - goto ret; } /* (VII) The case 0.787 < abs(x) <= 25, 0.0608 < abs(y) <= 0.787 */ - /* First stage */ - i = ((int) (mfftnhf.d + TWO8 * ya)); + i = ((int) (mfftnhf.d + 256 * ya)); z = (z0 = (ya - xfg[i][0].d)) + yya; z2 = z * z; pz = z + z * z2 * (e0.d + z2 * e1.d); @@ -340,76 +186,20 @@ __tan (double x) { /* -cot */ t2 = pz * (fi + gi) / (fi + pz); - if ((y = gi - (t2 - gi * u10.d)) == gi - (t2 + gi * u10.d)) - { - retval = (-sy * y); - goto ret; - } - t3 = (t2 < 0.0) ? -t2 : t2; - t4 = gi * ua10.d + t3 * ub10.d; - if ((y = gi - (t2 - t4)) == gi - (t2 + t4)) - { - retval = (-sy * y); - goto ret; - } + y = gi - t2; + retval = (-sy * y); + /* Max ULP is 0.62. */ + goto ret; } else { /* tan */ t2 = pz * (gi + fi) / (gi - pz); - if ((y = fi + (t2 - fi * u9.d)) == fi + (t2 + fi * u9.d)) - { - retval = (sy * y); - goto ret; - } - t3 = (t2 < 0.0) ? -t2 : t2; - t4 = fi * ua9.d + t3 * ub9.d; - if ((y = fi + (t2 - t4)) == fi + (t2 + t4)) - { - retval = (sy * y); - goto ret; - } - } - - /* Second stage */ - ffi = xfg[i][3].d; - EADD (z0, yya, z, zz) - MUL2 (z, zz, z, zz, z2, zz2, t1, t2); - c1 = z2 * (a7.d + z2 * (a9.d + z2 * a11.d)); - ADD2 (a5.d, aa5.d, c1, 0.0, c2, cc2, t1, t2); - MUL2 (z2, zz2, c2, cc2, c1, cc1, t1, t2); - ADD2 (a3.d, aa3.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (z2, zz2, c2, cc2, c1, cc1, t1, t2); - MUL2 (z, zz, c1, cc1, c2, cc2, t1, t2); - ADD2 (z, zz, c2, cc2, c1, cc1, t1, t2); - - ADD2 (fi, ffi, c1, cc1, c2, cc2, t1, t2); - MUL2 (fi, ffi, c1, cc1, c3, cc3, t1, t2); - SUB2 (1.0, 0.0, c3, cc3, c1, cc1, t1, t2); - - if (n) - { - /* -cot */ - DIV2 (c1, cc1, c2, cc2, c3, cc3, t1, t2, t3, t4); - if ((y = c3 + (cc3 - u12.d * c3)) == c3 + (cc3 + u12.d * c3)) - { - retval = (-sy * y); - goto ret; - } - } - else - { - /* tan */ - DIV2 (c2, cc2, c1, cc1, c3, cc3, t1, t2, t3, t4); - if ((y = c3 + (cc3 - u11.d * c3)) == c3 + (cc3 + u11.d * c3)) - { - retval = (sy * y); - goto ret; - } + y = fi + t2; + retval = (sy * y); + /* Max ULP is 0.62. */ + goto ret; } - - retval = tanMp (x); - goto ret; } /* (---) The case 25 < abs(x) <= 1e8 */ @@ -443,14 +233,7 @@ __tan (double x) sy = 1; } - /* (+++) The case 25 < abs(x) <= 1e8, abs(y) <= 1e-7 */ - if (ya <= gy1.d) - { - retval = tanMp (x); - goto ret; - } - - /* (VIII) The case 25 < abs(x) <= 1e8, 1e-7 < abs(y) <= 0.0608 */ + /* (VIII) The case 25 < abs(x) <= 1e8, 0 < abs(y) <= 0.0608 */ if (ya <= gy2.d) { a2 = a * a; @@ -462,76 +245,26 @@ __tan (double x) if (n) { - /* First stage -cot */ + /* -cot */ EADD (a, t2, b, db); DIV2 (1.0, 0.0, b, db, c, dc, t1, t2, t3, t4); - if ((y = c + (dc - u14.d * c)) == c + (dc + u14.d * c)) - { - retval = (-y); - goto ret; - } - } - else - { - /* First stage tan */ - if ((y = a + (t2 - u13.d * a)) == a + (t2 + u13.d * a)) - { - retval = y; - goto ret; - } - } - - /* Second stage */ - MUL2 (a, da, a, da, x2, xx2, t1, t2); - c1 = a25.d + x2 * a27.d; - c1 = a23.d + x2 * c1; - c1 = a21.d + x2 * c1; - c1 = a19.d + x2 * c1; - c1 = a17.d + x2 * c1; - c1 = a15.d + x2 * c1; - c1 *= x2; - - ADD2 (a13.d, aa13.d, c1, 0.0, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2); - ADD2 (a11.d, aa11.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2); - ADD2 (a9.d, aa9.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2); - ADD2 (a7.d, aa7.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2); - ADD2 (a5.d, aa5.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2); - ADD2 (a3.d, aa3.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2); - MUL2 (a, da, c1, cc1, c2, cc2, t1, t2); - ADD2 (a, da, c2, cc2, c1, cc1, t1, t2); - - if (n) - { - /* Second stage -cot */ - DIV2 (1.0, 0.0, c1, cc1, c2, cc2, t1, t2, t3, t4); - if ((y = c2 + (cc2 - u16.d * c2)) == c2 + (cc2 + u16.d * c2)) - { - retval = (-y); - goto ret; - } + y = c + dc; + retval = (-y); + /* Max ULP is 0.506. */ + goto ret; } else { - /* Second stage tan */ - if ((y = c1 + (cc1 - u15.d * c1)) == c1 + (cc1 + u15.d * c1)) - { - retval = (y); - goto ret; - } + /* tan */ + y = a + t2; + retval = y; + /* Max ULP is 0.506. */ + goto ret; } - retval = tanMp (x); - goto ret; } /* (IX) The case 25 < abs(x) <= 1e8, 0.0608 < abs(y) <= 0.787 */ - /* First stage */ - i = ((int) (mfftnhf.d + TWO8 * ya)); + i = ((int) (mfftnhf.d + 256 * ya)); z = (z0 = (ya - xfg[i][0].d)) + yya; z2 = z * z; pz = z + z * z2 * (e0.d + z2 * e1.d); @@ -542,75 +275,20 @@ __tan (double x) { /* -cot */ t2 = pz * (fi + gi) / (fi + pz); - if ((y = gi - (t2 - gi * u18.d)) == gi - (t2 + gi * u18.d)) - { - retval = (-sy * y); - goto ret; - } - t3 = (t2 < 0.0) ? -t2 : t2; - t4 = gi * ua18.d + t3 * ub18.d; - if ((y = gi - (t2 - t4)) == gi - (t2 + t4)) - { - retval = (-sy * y); - goto ret; - } + y = gi - t2; + retval = (-sy * y); + /* Max ULP is 0.62. */ + goto ret; } else { /* tan */ t2 = pz * (gi + fi) / (gi - pz); - if ((y = fi + (t2 - fi * u17.d)) == fi + (t2 + fi * u17.d)) - { - retval = (sy * y); - goto ret; - } - t3 = (t2 < 0.0) ? -t2 : t2; - t4 = fi * ua17.d + t3 * ub17.d; - if ((y = fi + (t2 - t4)) == fi + (t2 + t4)) - { - retval = (sy * y); - goto ret; - } - } - - /* Second stage */ - ffi = xfg[i][3].d; - EADD (z0, yya, z, zz); - MUL2 (z, zz, z, zz, z2, zz2, t1, t2); - c1 = z2 * (a7.d + z2 * (a9.d + z2 * a11.d)); - ADD2 (a5.d, aa5.d, c1, 0.0, c2, cc2, t1, t2); - MUL2 (z2, zz2, c2, cc2, c1, cc1, t1, t2); - ADD2 (a3.d, aa3.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (z2, zz2, c2, cc2, c1, cc1, t1, t2); - MUL2 (z, zz, c1, cc1, c2, cc2, t1, t2); - ADD2 (z, zz, c2, cc2, c1, cc1, t1, t2); - - ADD2 (fi, ffi, c1, cc1, c2, cc2, t1, t2); - MUL2 (fi, ffi, c1, cc1, c3, cc3, t1, t2); - SUB2 (1.0, 0.0, c3, cc3, c1, cc1, t1, t2); - - if (n) - { - /* -cot */ - DIV2 (c1, cc1, c2, cc2, c3, cc3, t1, t2, t3, t4); - if ((y = c3 + (cc3 - u20.d * c3)) == c3 + (cc3 + u20.d * c3)) - { - retval = (-sy * y); - goto ret; - } - } - else - { - /* tan */ - DIV2 (c2, cc2, c1, cc1, c3, cc3, t1, t2, t3, t4); - if ((y = c3 + (cc3 - u19.d * c3)) == c3 + (cc3 + u19.d * c3)) - { - retval = (sy * y); - goto ret; - } + y = fi + t2; + retval = (sy * y); + /* Max ULP is 0.62. */ + goto ret; } - retval = tanMp (x); - goto ret; } /* (---) The case 1e8 < abs(x) < 2**1024 */ @@ -632,14 +310,7 @@ __tan (double x) sy = 1; } - /* (+++) The case 1e8 < abs(x) < 2**1024, abs(y) <= 1e-7 */ - if (ya <= gy1.d) - { - retval = tanMp (x); - goto ret; - } - - /* (X) The case 1e8 < abs(x) < 2**1024, 1e-7 < abs(y) <= 0.0608 */ + /* (X) The case 1e8 < abs(x) < 2**1024, 0 < abs(y) <= 0.0608 */ if (ya <= gy2.d) { a2 = a * a; @@ -650,85 +321,26 @@ __tan (double x) t2 = da + a * a2 * t2; if (n) { - /* First stage -cot */ + /* -cot */ EADD (a, t2, b, db); DIV2 (1.0, 0.0, b, db, c, dc, t1, t2, t3, t4); - if ((y = c + (dc - u22.d * c)) == c + (dc + u22.d * c)) - { - retval = (-y); - goto ret; - } - } - else - { - /* First stage tan */ - if ((y = a + (t2 - u21.d * a)) == a + (t2 + u21.d * a)) - { - retval = y; - goto ret; - } - } - - /* Second stage */ - /* Reduction by algorithm iv */ - p = 10; - n = (__mpranred (x, &mpa, p)) & 0x00000001; - __mp_dbl (&mpa, &a, p); - __dbl_mp (a, &mpt1, p); - __sub (&mpa, &mpt1, &mpt2, p); - __mp_dbl (&mpt2, &da, p); - - MUL2 (a, da, a, da, x2, xx2, t1, t2); - - c1 = a25.d + x2 * a27.d; - c1 = a23.d + x2 * c1; - c1 = a21.d + x2 * c1; - c1 = a19.d + x2 * c1; - c1 = a17.d + x2 * c1; - c1 = a15.d + x2 * c1; - c1 *= x2; - - ADD2 (a13.d, aa13.d, c1, 0.0, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2); - ADD2 (a11.d, aa11.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2); - ADD2 (a9.d, aa9.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2); - ADD2 (a7.d, aa7.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2); - ADD2 (a5.d, aa5.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2); - ADD2 (a3.d, aa3.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2); - MUL2 (a, da, c1, cc1, c2, cc2, t1, t2); - ADD2 (a, da, c2, cc2, c1, cc1, t1, t2); - - if (n) - { - /* Second stage -cot */ - DIV2 (1.0, 0.0, c1, cc1, c2, cc2, t1, t2, t3, t4); - if ((y = c2 + (cc2 - u24.d * c2)) == c2 + (cc2 + u24.d * c2)) - { - retval = (-y); - goto ret; - } + y = c + dc; + retval = (-y); + /* Max ULP is 0.506. */ + goto ret; } else { - /* Second stage tan */ - if ((y = c1 + (cc1 - u23.d * c1)) == c1 + (cc1 + u23.d * c1)) - { - retval = y; - goto ret; - } + /* tan */ + y = a + t2; + retval = y; + /* Max ULP is 0.507. */ + goto ret; } - retval = tanMp (x); - goto ret; } /* (XI) The case 1e8 < abs(x) < 2**1024, 0.0608 < abs(y) <= 0.787 */ - /* First stage */ - i = ((int) (mfftnhf.d + TWO8 * ya)); + i = ((int) (mfftnhf.d + 256 * ya)); z = (z0 = (ya - xfg[i][0].d)) + yya; z2 = z * z; pz = z + z * z2 * (e0.d + z2 * e1.d); @@ -739,97 +351,25 @@ __tan (double x) { /* -cot */ t2 = pz * (fi + gi) / (fi + pz); - if ((y = gi - (t2 - gi * u26.d)) == gi - (t2 + gi * u26.d)) - { - retval = (-sy * y); - goto ret; - } - t3 = (t2 < 0.0) ? -t2 : t2; - t4 = gi * ua26.d + t3 * ub26.d; - if ((y = gi - (t2 - t4)) == gi - (t2 + t4)) - { - retval = (-sy * y); - goto ret; - } + y = gi - t2; + retval = (-sy * y); + /* Max ULP is 0.62. */ + goto ret; } else { /* tan */ t2 = pz * (gi + fi) / (gi - pz); - if ((y = fi + (t2 - fi * u25.d)) == fi + (t2 + fi * u25.d)) - { - retval = (sy * y); - goto ret; - } - t3 = (t2 < 0.0) ? -t2 : t2; - t4 = fi * ua25.d + t3 * ub25.d; - if ((y = fi + (t2 - t4)) == fi + (t2 + t4)) - { - retval = (sy * y); - goto ret; - } - } - - /* Second stage */ - ffi = xfg[i][3].d; - EADD (z0, yya, z, zz); - MUL2 (z, zz, z, zz, z2, zz2, t1, t2); - c1 = z2 * (a7.d + z2 * (a9.d + z2 * a11.d)); - ADD2 (a5.d, aa5.d, c1, 0.0, c2, cc2, t1, t2); - MUL2 (z2, zz2, c2, cc2, c1, cc1, t1, t2); - ADD2 (a3.d, aa3.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (z2, zz2, c2, cc2, c1, cc1, t1, t2); - MUL2 (z, zz, c1, cc1, c2, cc2, t1, t2); - ADD2 (z, zz, c2, cc2, c1, cc1, t1, t2); - - ADD2 (fi, ffi, c1, cc1, c2, cc2, t1, t2); - MUL2 (fi, ffi, c1, cc1, c3, cc3, t1, t2); - SUB2 (1.0, 0.0, c3, cc3, c1, cc1, t1, t2); - - if (n) - { - /* -cot */ - DIV2 (c1, cc1, c2, cc2, c3, cc3, t1, t2, t3, t4); - if ((y = c3 + (cc3 - u28.d * c3)) == c3 + (cc3 + u28.d * c3)) - { - retval = (-sy * y); - goto ret; - } - } - else - { - /* tan */ - DIV2 (c2, cc2, c1, cc1, c3, cc3, t1, t2, t3, t4); - if ((y = c3 + (cc3 - u27.d * c3)) == c3 + (cc3 + u27.d * c3)) - { - retval = (sy * y); - goto ret; - } + y = fi + t2; + retval = (sy * y); + /* Max ULP is 0.62. */ + goto ret; } - retval = tanMp (x); - goto ret; ret: return retval; } -/* multiple precision stage */ -/* Convert x to multi precision number,compute tan(x) by mptan() routine */ -/* and converts result back to double */ -static double -SECTION -tanMp (double x) -{ - int p; - double y; - mp_no mpy; - p = 32; - __mptan (x, &mpy, p); - __mp_dbl (&mpy, &y, p); - LIBC_PROBE (slowtan, 2, &x, &y); - return y; -} - #ifndef __tan libm_alias_double (__tan, tan) #endif diff --git a/sysdeps/ieee754/dbl-64/utan.h b/sysdeps/ieee754/dbl-64/utan.h index 85f4861b1f5d578c309822279120f64f21ac5c05..37e4be87b314a21aacdf262d14fc3bf70e4af6c5 100644 --- a/sysdeps/ieee754/dbl-64/utan.h +++ b/sysdeps/ieee754/dbl-64/utan.h @@ -28,7 +28,7 @@ #define UTAN_H #ifdef BIG_ENDI - static const number + static const mynumber /* polynomial I */ /**/ d3 = {{0x3FD55555, 0x55555555} }, /* 0.333... */ /**/ d5 = {{0x3FC11111, 0x111107C6} }, /* 0.133... */ @@ -36,46 +36,6 @@ /**/ d9 = {{0x3F9664ED, 0x49CFC666} }, /* . */ /**/ d11 = {{0x3F82385A, 0x3CF2E4EA} }, /* . */ /* polynomial II */ -/**/ a3 = {{0x3fd55555, 0x55555555} }, /* 1/3 */ -/**/ aa3 = {{0x3c755555, 0x55555555} }, /* 1/3-a3 */ -/**/ a5 = {{0x3fc11111, 0x11111111} }, /* 2/15 */ -/**/ aa5 = {{0x3c411111, 0x11111111} }, /* 2/15-a5 */ -/**/ a7 = {{0x3faba1ba, 0x1ba1ba1c} }, /* 17/315 */ -/**/ aa7 = {{0xbc479179, 0x17917918} }, /* ()-a7 */ -/**/ a9 = {{0x3f9664f4, 0x882c10fa} }, /* 62/2835 */ -/**/ aa9 = {{0xbc09a528, 0x8b6c44fd} }, /* ()-a9 */ -/**/ a11 = {{0x3f8226e3, 0x55e6c23d} }, /* . */ -/**/ aa11 = {{0xbc2c292b, 0x8f1a2c13} }, /* . */ -/**/ a13 = {{0x3f6d6d3d, 0x0e157de0} }, /* . */ -/**/ aa13 = {{0xbc0280cf, 0xc968d971} }, /* . */ -/**/ a15 = {{0x3f57da36, 0x452b75e3} }, /* . */ -#if 0 -/**/ aa15 = {{0xbbf25789, 0xb285d2ed} }, /* . */ -#endif -/**/ a17 = {{0x3f435582, 0x48036744} }, /* . */ -#if 0 -/**/ aa17 = {{0x3be488d9, 0x563f1f23} }, /* . */ -#endif -/**/ a19 = {{0x3f2f57d7, 0x734d1664} }, /* . */ -#if 0 -/**/ aa19 = {{0x3bb0d55a, 0x913ccb50} }, /* . */ -#endif -/**/ a21 = {{0x3f1967e1, 0x8afcafad} }, /* . */ -#if 0 -/**/ aa21 = {{0xbbbd7614, 0xa42d44e6} }, /* . */ -#endif -/**/ a23 = {{0x3f0497d8, 0xeea25259} }, /* . */ -#if 0 -/**/ aa23 = {{0x3b99f2d0, 0x2e4d2863} }, /* . */ -#endif -/**/ a25 = {{0x3ef0b132, 0xd39a6050} }, /* . */ -#if 0 -/**/ aa25 = {{0x3b93b274, 0xc2c19614} }, /* . */ -#endif -/**/ a27 = {{0x3edb0f72, 0xd3ee24e9} }, /* . */ -#if 0 -/**/ aa27 = {{0x3b61688d, 0xdd595609} }, /* . */ -#endif /* polynomial III */ /**/ e0 = {{0x3FD55555, 0x55554DBD} }, /* . */ /**/ e1 = {{0x3FC11112, 0xE0A6B45F} }, /* . */ @@ -88,52 +48,8 @@ /**/ g3 = {{0x3fe92f1a, 0x00000000} }, /* 0.787 */ /**/ g4 = {{0x40390000, 0x00000000} }, /* 25.0 */ /**/ g5 = {{0x4197d784, 0x00000000} }, /* 1e8 */ -/**/ gy1 = {{0x3e7ad7f2, 0x9abcaf48} }, /* 1e-7 */ /**/ gy2 = {{0x3faf212d, 0x00000000} }, /* 0.0608 */ -/**/ u1 = {{0x3cc8c33a, 0x00000000} }, /* 6.873e-16 */ -/**/ u2 = {{0x3983dc4d, 0x00000000} }, /* 1.224e-31 */ -/**/ u3 = {{0x3c78e14b, 0x00000000} }, /* 2.158e-17 */ -/**/ ua3 = {{0x3bfd8b58, 0x00000000} }, /* 1.001e-19 */ -/**/ ub3 = {{0x3cc81898, 0x00000000} }, /* 6.688e-16 */ -/**/ u4 = {{0x399856c2, 0x00000000} }, /* 3e-31 */ -/**/ u5 = {{0x3c39d80a, 0x00000000} }, /* 1.401e-18 */ -/**/ u6 = {{0x3c374c5a, 0x00000000} }, /* 1.263e-18 */ -/**/ u7 = {{0x39903beb, 0x00000000} }, /* 2.001e-31 */ -/**/ u8 = {{0x399c56ae, 0x00000000} }, /* 3.493e-31 */ -/**/ u9 = {{0x3c7d0ac7, 0x00000000} }, /* 2.519e-17 */ -/**/ ua9 = {{0x3bfd8b58, 0x00000000} }, /* 1.001e-19 */ -/**/ ub9 = {{0x3ccc2375, 0x00000000} }, /* 7.810e-16 */ -/**/ u10 = {{0x3c7e40af, 0x00000000} }, /* 2.624e-17 */ -/**/ ua10 = {{0x3bfd8b58, 0x00000000} }, /* 1.001e-19 */ -/**/ ub10 = {{0x3ccc6405, 0x00000000} }, /* 7.880e-16 */ -/**/ u11 = {{0x39e509b6, 0x00000000} }, /* 8.298e-30 */ -/**/ u12 = {{0x39e509b6, 0x00000000} }, /* 8.298e-30 */ -/**/ u13 = {{0x3c39d80a, 0x00000000} }, /* 1.401e-18 */ -/**/ u14 = {{0x3c374c5a, 0x00000000} }, /* 1.263e-18 */ -/**/ u15 = {{0x3ab5767a, 0x00000000} }, /* 6.935e-26 */ -/**/ u16 = {{0x3ab57744, 0x00000000} }, /* 6.936e-26 */ -/**/ u17 = {{0x3c7d0ac7, 0x00000000} }, /* 2.519e-17 */ -/**/ ua17 = {{0x3bfdb11f, 0x00000000} }, /* 1.006e-19 */ -/**/ ub17 = {{0x3ccc2375, 0x00000000} }, /* 7.810e-16 */ -/**/ u18 = {{0x3c7e40af, 0x00000000} }, /* 2.624e-17 */ -/**/ ua18 = {{0x3bfdb11f, 0x00000000} }, /* 1.006e-19 */ -/**/ ub18 = {{0x3ccc6405, 0x00000000} }, /* 7.880e-16 */ -/**/ u19 = {{0x39a13b61, 0x00000000} }, /* 4.248e-31 */ -/**/ u20 = {{0x39a13b61, 0x00000000} }, /* 4.248e-31 */ -/**/ u21 = {{0x3c3bb9b8, 0x00000000} }, /* 1.503e-18 */ -/**/ u22 = {{0x3c392e08, 0x00000000} }, /* 1.365e-18 */ -/**/ u23 = {{0x3a0ce706, 0x00000000} }, /* 4.560e-29 */ -/**/ u24 = {{0x3a0cff5d, 0x00000000} }, /* 4.575e-29 */ -/**/ u25 = {{0x3c7d0ac7, 0x00000000} }, /* 2.519e-17 */ -/**/ ua25 = {{0x3bfd8b58, 0x00000000} }, /* 1.001e-19 */ -/**/ ub25 = {{0x3ccc2375, 0x00000000} }, /* 7.810e-16 */ -/**/ u26 = {{0x3c7e40af, 0x00000000} }, /* 2.624e-17 */ -/**/ ua26 = {{0x3bfd8b58, 0x00000000} }, /* 1.001e-19 */ -/**/ ub26 = {{0x3ccc6405, 0x00000000} }, /* 7.880e-16 */ -/**/ u27 = {{0x3ad421cb, 0x00000000} }, /* 2.602e-25 */ -/**/ u28 = {{0x3ad421cb, 0x00000000} }, /* 2.602e-25 */ - /**/ mp1 = {{0x3FF921FB, 0x58000000} }, /**/ mp2 = {{0xBE4DDE97, 0x3C000000} }, /**/ mp3 = {{0xBC8CB3B3, 0x99D747F2} }, @@ -145,7 +61,7 @@ #else #ifdef LITTLE_ENDI - static const number + static const mynumber /* polynomial I */ /**/ d3 = {{0x55555555, 0x3FD55555} }, /* 0.333... */ /**/ d5 = {{0x111107C6, 0x3FC11111} }, /* 0.133... */ @@ -153,46 +69,6 @@ /**/ d9 = {{0x49CFC666, 0x3F9664ED} }, /* . */ /**/ d11 = {{0x3CF2E4EA, 0x3F82385A} }, /* . */ /* polynomial II */ -/**/ a3 = {{0x55555555, 0x3fd55555} }, /* 1/3 */ -/**/ aa3 = {{0x55555555, 0x3c755555} }, /* 1/3-a3 */ -/**/ a5 = {{0x11111111, 0x3fc11111} }, /* 2/15 */ -/**/ aa5 = {{0x11111111, 0x3c411111} }, /* 2/15-a5 */ -/**/ a7 = {{0x1ba1ba1c, 0x3faba1ba} }, /* 17/315 */ -/**/ aa7 = {{0x17917918, 0xbc479179} }, /* ()-a7 */ -/**/ a9 = {{0x882c10fa, 0x3f9664f4} }, /* 62/2835 */ -/**/ aa9 = {{0x8b6c44fd, 0xbc09a528} }, /* ()-a9 */ -/**/ a11 = {{0x55e6c23d, 0x3f8226e3} }, /* . */ -/**/ aa11 = {{0x8f1a2c13, 0xbc2c292b} }, /* . */ -/**/ a13 = {{0x0e157de0, 0x3f6d6d3d} }, /* . */ -/**/ aa13 = {{0xc968d971, 0xbc0280cf} }, /* . */ -/**/ a15 = {{0x452b75e3, 0x3f57da36} }, /* . */ -#if 0 -/**/ aa15 = {{0xb285d2ed, 0xbbf25789} }, /* . */ -#endif -/**/ a17 = {{0x48036744, 0x3f435582} }, /* . */ -#if 0 -/**/ aa17 = {{0x563f1f23, 0x3be488d9} }, /* . */ -#endif -/**/ a19 = {{0x734d1664, 0x3f2f57d7} }, /* . */ -#if 0 -/**/ aa19 = {{0x913ccb50, 0x3bb0d55a} }, /* . */ -#endif -/**/ a21 = {{0x8afcafad, 0x3f1967e1} }, /* . */ -#if 0 -/**/ aa21 = {{0xa42d44e6, 0xbbbd7614} }, /* . */ -#endif -/**/ a23 = {{0xeea25259, 0x3f0497d8} }, /* . */ -#if 0 -/**/ aa23 = {{0x2e4d2863, 0x3b99f2d0} }, /* . */ -#endif -/**/ a25 = {{0xd39a6050, 0x3ef0b132} }, /* . */ -#if 0 -/**/ aa25 = {{0xc2c19614, 0x3b93b274} }, /* . */ -#endif -/**/ a27 = {{0xd3ee24e9, 0x3edb0f72} }, /* . */ -#if 0 -/**/ aa27 = {{0xdd595609, 0x3b61688d} }, /* . */ -#endif /* polynomial III */ /**/ e0 = {{0x55554DBD, 0x3FD55555} }, /* . */ /**/ e1 = {{0xE0A6B45F, 0x3FC11112} }, /* . */ @@ -205,52 +81,8 @@ /**/ g3 = {{0x00000000, 0x3fe92f1a} }, /* 0.787 */ /**/ g4 = {{0x00000000, 0x40390000} }, /* 25.0 */ /**/ g5 = {{0x00000000, 0x4197d784} }, /* 1e8 */ -/**/ gy1 = {{0x9abcaf48, 0x3e7ad7f2} }, /* 1e-7 */ /**/ gy2 = {{0x00000000, 0x3faf212d} }, /* 0.0608 */ -/**/ u1 = {{0x00000000, 0x3cc8c33a} }, /* 6.873e-16 */ -/**/ u2 = {{0x00000000, 0x3983dc4d} }, /* 1.224e-31 */ -/**/ u3 = {{0x00000000, 0x3c78e14b} }, /* 2.158e-17 */ -/**/ ua3 = {{0x00000000, 0x3bfd8b58} }, /* 1.001e-19 */ -/**/ ub3 = {{0x00000000, 0x3cc81898} }, /* 6.688e-16 */ -/**/ u4 = {{0x00000000, 0x399856c2} }, /* 3e-31 */ -/**/ u5 = {{0x00000000, 0x3c39d80a} }, /* 1.401e-18 */ -/**/ u6 = {{0x00000000, 0x3c374c5a} }, /* 1.263e-18 */ -/**/ u7 = {{0x00000000, 0x39903beb} }, /* 2.001e-31 */ -/**/ u8 = {{0x00000000, 0x399c56ae} }, /* 3.493e-31 */ -/**/ u9 = {{0x00000000, 0x3c7d0ac7} }, /* 2.519e-17 */ -/**/ ua9 = {{0x00000000, 0x3bfd8b58} }, /* 1.001e-19 */ -/**/ ub9 = {{0x00000000, 0x3ccc2375} }, /* 7.810e-16 */ -/**/ u10 = {{0x00000000, 0x3c7e40af} }, /* 2.624e-17 */ -/**/ ua10 = {{0x00000000, 0x3bfd8b58} }, /* 1.001e-19 */ -/**/ ub10 = {{0x00000000, 0x3ccc6405} }, /* 7.880e-16 */ -/**/ u11 = {{0x00000000, 0x39e509b6} }, /* 8.298e-30 */ -/**/ u12 = {{0x00000000, 0x39e509b6} }, /* 8.298e-30 */ -/**/ u13 = {{0x00000000, 0x3c39d80a} }, /* 1.401e-18 */ -/**/ u14 = {{0x00000000, 0x3c374c5a} }, /* 1.263e-18 */ -/**/ u15 = {{0x00000000, 0x3ab5767a} }, /* 6.935e-26 */ -/**/ u16 = {{0x00000000, 0x3ab57744} }, /* 6.936e-26 */ -/**/ u17 = {{0x00000000, 0x3c7d0ac7} }, /* 2.519e-17 */ -/**/ ua17 = {{0x00000000, 0x3bfdb11f} }, /* 1.006e-19 */ -/**/ ub17 = {{0x00000000, 0x3ccc2375} }, /* 7.810e-16 */ -/**/ u18 = {{0x00000000, 0x3c7e40af} }, /* 2.624e-17 */ -/**/ ua18 = {{0x00000000, 0x3bfdb11f} }, /* 1.006e-19 */ -/**/ ub18 = {{0x00000000, 0x3ccc6405} }, /* 7.880e-16 */ -/**/ u19 = {{0x00000000, 0x39a13b61} }, /* 4.248e-31 */ -/**/ u20 = {{0x00000000, 0x39a13b61} }, /* 4.248e-31 */ -/**/ u21 = {{0x00000000, 0x3c3bb9b8} }, /* 1.503e-18 */ -/**/ u22 = {{0x00000000, 0x3c392e08} }, /* 1.365e-18 */ -/**/ u23 = {{0x00000000, 0x3a0ce706} }, /* 4.560e-29 */ -/**/ u24 = {{0x00000000, 0x3a0cff5d} }, /* 4.575e-29 */ -/**/ u25 = {{0x00000000, 0x3c7d0ac7} }, /* 2.519e-17 */ -/**/ ua25 = {{0x00000000, 0x3bfd8b58} }, /* 1.001e-19 */ -/**/ ub25 = {{0x00000000, 0x3ccc2375} }, /* 7.810e-16 */ -/**/ u26 = {{0x00000000, 0x3c7e40af} }, /* 2.624e-17 */ -/**/ ua26 = {{0x00000000, 0x3bfd8b58} }, /* 1.001e-19 */ -/**/ ub26 = {{0x00000000, 0x3ccc6405} }, /* 7.880e-16 */ -/**/ u27 = {{0x00000000, 0x3ad421cb} }, /* 2.602e-25 */ -/**/ u28 = {{0x00000000, 0x3ad421cb} }, /* 2.602e-25 */ - /**/ mp1 = {{0x58000000, 0x3FF921FB} }, /**/ mp2 = {{0x3C000000, 0xBE4DDE97} }, /**/ mp3 = {{0x99D747F2, 0xBC8CB3B3} }, diff --git a/sysdeps/ieee754/dbl-64/utan.tbl b/sysdeps/ieee754/dbl-64/utan.tbl index 325abdeab300027e99c9160c8d083c6840c73b0b..f05e67f48847b740f2aac2ac3c36ff1265fe9d2f 100644 --- a/sysdeps/ieee754/dbl-64/utan.tbl +++ b/sysdeps/ieee754/dbl-64/utan.tbl @@ -23,7 +23,7 @@ #ifdef BIG_ENDI -static const number +static const mynumber xfg[186][4] = { /* xi,Fi,Gi,FFi, i=16..201 */ /**/ {{{0x3fb00000, 0x1e519d60} }, /**/ {{0x3fb00557, 0x96c4e240} }, @@ -773,7 +773,7 @@ static const number #else #ifdef LITTLE_ENDI -static const number +static const mynumber xfg[186][4] = { /* xi,Fi,Gi,FFi, i=16..201 */ /**/ {{{0x1e519d60, 0x3fb00000} }, /**/ {{0x96c4e240, 0x3fb00557} },