Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(28)

Side by Side Diff: fusl/src/math/__rem_pio2_large.c

Issue 1714623002: [fusl] clang-format fusl (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: headers too Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* origin: FreeBSD /usr/src/lib/msun/src/k_rem_pio2.c */ 1 /* origin: FreeBSD /usr/src/lib/msun/src/k_rem_pio2.c */
2 /* 2 /*
3 * ==================================================== 3 * ====================================================
4 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. 4 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
5 * 5 *
6 * Developed at SunSoft, a Sun Microsystems, Inc. business. 6 * Developed at SunSoft, a Sun Microsystems, Inc. business.
7 * Permission to use, copy, modify, and distribute this 7 * Permission to use, copy, modify, and distribute this
8 * software is freely granted, provided that this notice 8 * software is freely granted, provided that this notice
9 * is preserved. 9 * is preserved.
10 * ==================================================== 10 * ====================================================
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 /* 117 /*
118 * Constants: 118 * Constants:
119 * The hexadecimal values are the intended ones for the following 119 * The hexadecimal values are the intended ones for the following
120 * constants. The decimal values may be used, provided that the 120 * constants. The decimal values may be used, provided that the
121 * compiler will convert from decimal to binary accurately enough 121 * compiler will convert from decimal to binary accurately enough
122 * to produce the hexadecimal values shown. 122 * to produce the hexadecimal values shown.
123 */ 123 */
124 124
125 #include "libm.h" 125 #include "libm.h"
126 126
127 static const int init_jk[] = {3,4,4,6}; /* initial value for jk */ 127 static const int init_jk[] = {3, 4, 4, 6}; /* initial value for jk */
128 128
129 /* 129 /*
130 * Table of constants for 2/pi, 396 Hex digits (476 decimal) of 2/pi 130 * Table of constants for 2/pi, 396 Hex digits (476 decimal) of 2/pi
131 * 131 *
132 * integer array, contains the (24*i)-th to (24*i+23)-th 132 * integer array, contains the (24*i)-th to (24*i+23)-th
133 * bit of 2/pi after binary point. The corresponding 133 * bit of 2/pi after binary point. The corresponding
134 * floating value is 134 * floating value is
135 * 135 *
136 * ipio2[i] * 2^(-24(i+1)). 136 * ipio2[i] * 2^(-24(i+1)).
137 * 137 *
138 * NB: This table must have at least (e0-3)/24 + jk terms. 138 * NB: This table must have at least (e0-3)/24 + jk terms.
139 * For quad precision (e0 <= 16360, jk = 6), this is 686. 139 * For quad precision (e0 <= 16360, jk = 6), this is 686.
140 */ 140 */
141 static const int32_t ipio2[] = { 141 static const int32_t ipio2[] = {
142 0xA2F983, 0x6E4E44, 0x1529FC, 0x2757D1, 0xF534DD, 0xC0DB62, 142 0xA2F983, 0x6E4E44, 0x1529FC, 0x2757D1, 0xF534DD, 0xC0DB62, 0x95993C,
143 0x95993C, 0x439041, 0xFE5163, 0xABDEBB, 0xC561B7, 0x246E3A, 143 0x439041, 0xFE5163, 0xABDEBB, 0xC561B7, 0x246E3A, 0x424DD2, 0xE00649,
144 0x424DD2, 0xE00649, 0x2EEA09, 0xD1921C, 0xFE1DEB, 0x1CB129, 144 0x2EEA09, 0xD1921C, 0xFE1DEB, 0x1CB129, 0xA73EE8, 0x8235F5, 0x2EBB44,
145 0xA73EE8, 0x8235F5, 0x2EBB44, 0x84E99C, 0x7026B4, 0x5F7E41, 145 0x84E99C, 0x7026B4, 0x5F7E41, 0x3991D6, 0x398353, 0x39F49C, 0x845F8B,
146 0x3991D6, 0x398353, 0x39F49C, 0x845F8B, 0xBDF928, 0x3B1FF8, 146 0xBDF928, 0x3B1FF8, 0x97FFDE, 0x05980F, 0xEF2F11, 0x8B5A0A, 0x6D1F6D,
147 0x97FFDE, 0x05980F, 0xEF2F11, 0x8B5A0A, 0x6D1F6D, 0x367ECF, 147 0x367ECF, 0x27CB09, 0xB74F46, 0x3F669E, 0x5FEA2D, 0x7527BA, 0xC7EBE5,
148 0x27CB09, 0xB74F46, 0x3F669E, 0x5FEA2D, 0x7527BA, 0xC7EBE5, 148 0xF17B3D, 0x0739F7, 0x8A5292, 0xEA6BFB, 0x5FB11F, 0x8D5D08, 0x560330,
149 0xF17B3D, 0x0739F7, 0x8A5292, 0xEA6BFB, 0x5FB11F, 0x8D5D08, 149 0x46FC7B, 0x6BABF0, 0xCFBC20, 0x9AF436, 0x1DA9E3, 0x91615E, 0xE61B08,
150 0x560330, 0x46FC7B, 0x6BABF0, 0xCFBC20, 0x9AF436, 0x1DA9E3, 150 0x659985, 0x5F14A0, 0x68408D, 0xFFD880, 0x4D7327, 0x310606, 0x1556CA,
151 0x91615E, 0xE61B08, 0x659985, 0x5F14A0, 0x68408D, 0xFFD880, 151 0x73A8C9, 0x60E27B, 0xC08C6B,
152 0x4D7327, 0x310606, 0x1556CA, 0x73A8C9, 0x60E27B, 0xC08C6B,
153 152
154 #if LDBL_MAX_EXP > 1024 153 #if LDBL_MAX_EXP > 1024
155 0x47C419, 0xC367CD, 0xDCE809, 0x2A8359, 0xC4768B, 0x961CA6, 154 0x47C419, 0xC367CD, 0xDCE809, 0x2A8359, 0xC4768B, 0x961CA6, 0xDDAF44,
156 0xDDAF44, 0xD15719, 0x053EA5, 0xFF0705, 0x3F7E33, 0xE832C2, 155 0xD15719, 0x053EA5, 0xFF0705, 0x3F7E33, 0xE832C2, 0xDE4F98, 0x327DBB,
157 0xDE4F98, 0x327DBB, 0xC33D26, 0xEF6B1E, 0x5EF89F, 0x3A1F35, 156 0xC33D26, 0xEF6B1E, 0x5EF89F, 0x3A1F35, 0xCAF27F, 0x1D87F1, 0x21907C,
158 0xCAF27F, 0x1D87F1, 0x21907C, 0x7C246A, 0xFA6ED5, 0x772D30, 157 0x7C246A, 0xFA6ED5, 0x772D30, 0x433B15, 0xC614B5, 0x9D19C3, 0xC2C4AD,
159 0x433B15, 0xC614B5, 0x9D19C3, 0xC2C4AD, 0x414D2C, 0x5D000C, 158 0x414D2C, 0x5D000C, 0x467D86, 0x2D71E3, 0x9AC69B, 0x006233, 0x7CD2B4,
160 0x467D86, 0x2D71E3, 0x9AC69B, 0x006233, 0x7CD2B4, 0x97A7B4, 159 0x97A7B4, 0xD55537, 0xF63ED7, 0x1810A3, 0xFC764D, 0x2A9D64, 0xABD770,
161 0xD55537, 0xF63ED7, 0x1810A3, 0xFC764D, 0x2A9D64, 0xABD770, 160 0xF87C63, 0x57B07A, 0xE71517, 0x5649C0, 0xD9D63B, 0x3884A7, 0xCB2324,
162 0xF87C63, 0x57B07A, 0xE71517, 0x5649C0, 0xD9D63B, 0x3884A7, 161 0x778AD6, 0x23545A, 0xB91F00, 0x1B0AF1, 0xDFCE19, 0xFF319F, 0x6A1E66,
163 0xCB2324, 0x778AD6, 0x23545A, 0xB91F00, 0x1B0AF1, 0xDFCE19, 162 0x615799, 0x47FBAC, 0xD87F7E, 0xB76522, 0x89E832, 0x60BFE6, 0xCDC4EF,
164 0xFF319F, 0x6A1E66, 0x615799, 0x47FBAC, 0xD87F7E, 0xB76522, 163 0x09366C, 0xD43F5D, 0xD7DE16, 0xDE3B58, 0x929BDE, 0x2822D2, 0xE88628,
165 0x89E832, 0x60BFE6, 0xCDC4EF, 0x09366C, 0xD43F5D, 0xD7DE16, 164 0x4D58E2, 0x32CAC6, 0x16E308, 0xCB7DE0, 0x50C017, 0xA71DF3, 0x5BE018,
166 0xDE3B58, 0x929BDE, 0x2822D2, 0xE88628, 0x4D58E2, 0x32CAC6, 165 0x34132E, 0x621283, 0x014883, 0x5B8EF5, 0x7FB0AD, 0xF2E91E, 0x434A48,
167 0x16E308, 0xCB7DE0, 0x50C017, 0xA71DF3, 0x5BE018, 0x34132E, 166 0xD36710, 0xD8DDAA, 0x425FAE, 0xCE616A, 0xA4280A, 0xB499D3, 0xF2A606,
168 0x621283, 0x014883, 0x5B8EF5, 0x7FB0AD, 0xF2E91E, 0x434A48, 167 0x7F775C, 0x83C2A3, 0x883C61, 0x78738A, 0x5A8CAF, 0xBDD76F, 0x63A62D,
169 0xD36710, 0xD8DDAA, 0x425FAE, 0xCE616A, 0xA4280A, 0xB499D3, 168 0xCBBFF4, 0xEF818D, 0x67C126, 0x45CA55, 0x36D9CA, 0xD2A828, 0x8D61C2,
170 0xF2A606, 0x7F775C, 0x83C2A3, 0x883C61, 0x78738A, 0x5A8CAF, 169 0x77C912, 0x142604, 0x9B4612, 0xC459C4, 0x44C5C8, 0x91B24D, 0xF31700,
171 0xBDD76F, 0x63A62D, 0xCBBFF4, 0xEF818D, 0x67C126, 0x45CA55, 170 0xAD43D4, 0xE54929, 0x10D5FD, 0xFCBE00, 0xCC941E, 0xEECE70, 0xF53E13,
172 0x36D9CA, 0xD2A828, 0x8D61C2, 0x77C912, 0x142604, 0x9B4612, 171 0x80F1EC, 0xC3E7B3, 0x28F8C7, 0x940593, 0x3E71C1, 0xB3092E, 0xF3450B,
173 0xC459C4, 0x44C5C8, 0x91B24D, 0xF31700, 0xAD43D4, 0xE54929, 172 0x9C1288, 0x7B20AB, 0x9FB52E, 0xC29247, 0x2F327B, 0x6D550C, 0x90A772,
174 0x10D5FD, 0xFCBE00, 0xCC941E, 0xEECE70, 0xF53E13, 0x80F1EC, 173 0x1FE76B, 0x96CB31, 0x4A1679, 0xE27941, 0x89DFF4, 0x9794E8, 0x84E6E2,
175 0xC3E7B3, 0x28F8C7, 0x940593, 0x3E71C1, 0xB3092E, 0xF3450B, 174 0x973199, 0x6BED88, 0x365F5F, 0x0EFDBB, 0xB49A48, 0x6CA467, 0x427271,
176 0x9C1288, 0x7B20AB, 0x9FB52E, 0xC29247, 0x2F327B, 0x6D550C, 175 0x325D8D, 0xB8159F, 0x09E5BC, 0x25318D, 0x3974F7, 0x1C0530, 0x010C0D,
177 0x90A772, 0x1FE76B, 0x96CB31, 0x4A1679, 0xE27941, 0x89DFF4, 176 0x68084B, 0x58EE2C, 0x90AA47, 0x02E774, 0x24D6BD, 0xA67DF7, 0x72486E,
178 0x9794E8, 0x84E6E2, 0x973199, 0x6BED88, 0x365F5F, 0x0EFDBB, 177 0xEF169F, 0xA6948E, 0xF691B4, 0x5153D1, 0xF20ACF, 0x339820, 0x7E4BF5,
179 0xB49A48, 0x6CA467, 0x427271, 0x325D8D, 0xB8159F, 0x09E5BC, 178 0x6863B2, 0x5F3EDD, 0x035D40, 0x7F8985, 0x295255, 0xC06437, 0x10D86D,
180 0x25318D, 0x3974F7, 0x1C0530, 0x010C0D, 0x68084B, 0x58EE2C, 179 0x324832, 0x754C5B, 0xD4714E, 0x6E5445, 0xC1090B, 0x69F52A, 0xD56614,
181 0x90AA47, 0x02E774, 0x24D6BD, 0xA67DF7, 0x72486E, 0xEF169F, 180 0x9D0727, 0x50045D, 0xDB3BB4, 0xC576EA, 0x17F987, 0x7D6B49, 0xBA271D,
182 0xA6948E, 0xF691B4, 0x5153D1, 0xF20ACF, 0x339820, 0x7E4BF5, 181 0x296996, 0xACCCC6, 0x5414AD, 0x6AE290, 0x89D988, 0x50722C, 0xBEA404,
183 0x6863B2, 0x5F3EDD, 0x035D40, 0x7F8985, 0x295255, 0xC06437, 182 0x940777, 0x7030F3, 0x27FC00, 0xA871EA, 0x49C266, 0x3DE064, 0x83DD97,
184 0x10D86D, 0x324832, 0x754C5B, 0xD4714E, 0x6E5445, 0xC1090B, 183 0x973FA3, 0xFD9443, 0x8C860D, 0xDE4131, 0x9D3992, 0x8C70DD, 0xE7B717,
185 0x69F52A, 0xD56614, 0x9D0727, 0x50045D, 0xDB3BB4, 0xC576EA, 184 0x3BDF08, 0x2B3715, 0xA0805C, 0x93805A, 0x921110, 0xD8E80F, 0xAF806C,
186 0x17F987, 0x7D6B49, 0xBA271D, 0x296996, 0xACCCC6, 0x5414AD, 185 0x4BFFDB, 0x0F9038, 0x761859, 0x15A562, 0xBBCB61, 0xB989C7, 0xBD4010,
187 0x6AE290, 0x89D988, 0x50722C, 0xBEA404, 0x940777, 0x7030F3, 186 0x04F2D2, 0x277549, 0xF6B6EB, 0xBB22DB, 0xAA140A, 0x2F2689, 0x768364,
188 0x27FC00, 0xA871EA, 0x49C266, 0x3DE064, 0x83DD97, 0x973FA3, 187 0x333B09, 0x1A940E, 0xAA3A51, 0xC2A31D, 0xAEEDAF, 0x12265C, 0x4DC26D,
189 0xFD9443, 0x8C860D, 0xDE4131, 0x9D3992, 0x8C70DD, 0xE7B717, 188 0x9C7A2D, 0x9756C0, 0x833F03, 0xF6F009, 0x8C402B, 0x99316D, 0x07B439,
190 0x3BDF08, 0x2B3715, 0xA0805C, 0x93805A, 0x921110, 0xD8E80F, 189 0x15200C, 0x5BC3D8, 0xC492F5, 0x4BADC6, 0xA5CA4E, 0xCD37A7, 0x36A9E6,
191 0xAF806C, 0x4BFFDB, 0x0F9038, 0x761859, 0x15A562, 0xBBCB61, 190 0x9492AB, 0x6842DD, 0xDE6319, 0xEF8C76, 0x528B68, 0x37DBFC, 0xABA1AE,
192 0xB989C7, 0xBD4010, 0x04F2D2, 0x277549, 0xF6B6EB, 0xBB22DB, 191 0x3115DF, 0xA1AE00, 0xDAFB0C, 0x664D64, 0xB705ED, 0x306529, 0xBF5657,
193 0xAA140A, 0x2F2689, 0x768364, 0x333B09, 0x1A940E, 0xAA3A51, 192 0x3AFF47, 0xB9F96A, 0xF3BE75, 0xDF9328, 0x3080AB, 0xF68C66, 0x15CB04,
194 0xC2A31D, 0xAEEDAF, 0x12265C, 0x4DC26D, 0x9C7A2D, 0x9756C0, 193 0x0622FA, 0x1DE4D9, 0xA4B33D, 0x8F1B57, 0x09CD36, 0xE9424E, 0xA4BE13,
195 0x833F03, 0xF6F009, 0x8C402B, 0x99316D, 0x07B439, 0x15200C, 194 0xB52333, 0x1AAAF0, 0xA8654F, 0xA5C1D2, 0x0F3F0B, 0xCD785B, 0x76F923,
196 0x5BC3D8, 0xC492F5, 0x4BADC6, 0xA5CA4E, 0xCD37A7, 0x36A9E6, 195 0x048B7B, 0x721789, 0x53A6C6, 0xE26E6F, 0x00EBEF, 0x584A9B, 0xB7DAC4,
197 0x9492AB, 0x6842DD, 0xDE6319, 0xEF8C76, 0x528B68, 0x37DBFC, 196 0xBA66AA, 0xCFCF76, 0x1D02D1, 0x2DF1B1, 0xC1998C, 0x77ADC3, 0xDA4886,
198 0xABA1AE, 0x3115DF, 0xA1AE00, 0xDAFB0C, 0x664D64, 0xB705ED, 197 0xA05DF7, 0xF480C6, 0x2FF0AC, 0x9AECDD, 0xBC5C3F, 0x6DDED0, 0x1FC790,
199 0x306529, 0xBF5657, 0x3AFF47, 0xB9F96A, 0xF3BE75, 0xDF9328, 198 0xB6DB2A, 0x3A25A3, 0x9AAF00, 0x9353AD, 0x0457B6, 0xB42D29, 0x7E804B,
200 0x3080AB, 0xF68C66, 0x15CB04, 0x0622FA, 0x1DE4D9, 0xA4B33D, 199 0xA707DA, 0x0EAA76, 0xA1597B, 0x2A1216, 0x2DB7DC, 0xFDE5FA, 0xFEDB89,
201 0x8F1B57, 0x09CD36, 0xE9424E, 0xA4BE13, 0xB52333, 0x1AAAF0, 200 0xFDBE89, 0x6C76E4, 0xFCA906, 0x70803E, 0x156E85, 0xFF87FD, 0x073E28,
202 0xA8654F, 0xA5C1D2, 0x0F3F0B, 0xCD785B, 0x76F923, 0x048B7B, 201 0x336761, 0x86182A, 0xEABD4D, 0xAFE7B3, 0x6E6D8F, 0x396795, 0x5BBF31,
203 0x721789, 0x53A6C6, 0xE26E6F, 0x00EBEF, 0x584A9B, 0xB7DAC4, 202 0x48D784, 0x16DF30, 0x432DC7, 0x356125, 0xCE70C9, 0xB8CB30, 0xFD6CBF,
204 0xBA66AA, 0xCFCF76, 0x1D02D1, 0x2DF1B1, 0xC1998C, 0x77ADC3, 203 0xA200A4, 0xE46C05, 0xA0DD5A, 0x476F21, 0xD21262, 0x845CB9, 0x496170,
205 0xDA4886, 0xA05DF7, 0xF480C6, 0x2FF0AC, 0x9AECDD, 0xBC5C3F, 204 0xE0566B, 0x015299, 0x375550, 0xB7D51E, 0xC4F133, 0x5F6E13, 0xE4305D,
206 0x6DDED0, 0x1FC790, 0xB6DB2A, 0x3A25A3, 0x9AAF00, 0x9353AD, 205 0xA92E85, 0xC3B21D, 0x3632A1, 0xA4B708, 0xD4B1EA, 0x21F716, 0xE4698F,
207 0x0457B6, 0xB42D29, 0x7E804B, 0xA707DA, 0x0EAA76, 0xA1597B, 206 0x77FF27, 0x80030C, 0x2D408D, 0xA0CD4F, 0x99A520, 0xD3A2B3, 0x0A5D2F,
208 0x2A1216, 0x2DB7DC, 0xFDE5FA, 0xFEDB89, 0xFDBE89, 0x6C76E4, 207 0x42F9B4, 0xCBDA11, 0xD0BE7D, 0xC1DB9B, 0xBD17AB, 0x81A2CA, 0x5C6A08,
209 0xFCA906, 0x70803E, 0x156E85, 0xFF87FD, 0x073E28, 0x336761, 208 0x17552E, 0x550027, 0xF0147F, 0x8607E1, 0x640B14, 0x8D4196, 0xDEBE87,
210 0x86182A, 0xEABD4D, 0xAFE7B3, 0x6E6D8F, 0x396795, 0x5BBF31, 209 0x2AFDDA, 0xB6256B, 0x34897B, 0xFEF305, 0x9EBFB9, 0x4F6A68, 0xA82A4A,
211 0x48D784, 0x16DF30, 0x432DC7, 0x356125, 0xCE70C9, 0xB8CB30, 210 0x5AC44F, 0xBCF82D, 0x985AD7, 0x95C7F4, 0x8D4D0D, 0xA63A20, 0x5F57A4,
212 0xFD6CBF, 0xA200A4, 0xE46C05, 0xA0DD5A, 0x476F21, 0xD21262, 211 0xB13F14, 0x953880, 0x0120CC, 0x86DD71, 0xB6DEC9, 0xF560BF, 0x11654D,
213 0x845CB9, 0x496170, 0xE0566B, 0x015299, 0x375550, 0xB7D51E, 212 0x6B0701, 0xACB08C, 0xD0C0B2, 0x485551, 0x0EFB1E, 0xC37295, 0x3B06A3,
214 0xC4F133, 0x5F6E13, 0xE4305D, 0xA92E85, 0xC3B21D, 0x3632A1, 213 0x3540C0, 0x7BDC06, 0xCC45E0, 0xFA294E, 0xC8CAD6, 0x41F3E8, 0xDE647C,
215 0xA4B708, 0xD4B1EA, 0x21F716, 0xE4698F, 0x77FF27, 0x80030C, 214 0xD8649B, 0x31BED9, 0xC397A4, 0xD45877, 0xC5E369, 0x13DAF0, 0x3C3ABA,
216 0x2D408D, 0xA0CD4F, 0x99A520, 0xD3A2B3, 0x0A5D2F, 0x42F9B4, 215 0x461846, 0x5F7555, 0xF5BDD2, 0xC6926E, 0x5D2EAC, 0xED440E, 0x423E1C,
217 0xCBDA11, 0xD0BE7D, 0xC1DB9B, 0xBD17AB, 0x81A2CA, 0x5C6A08, 216 0x87C461, 0xE9FD29, 0xF3D6E7, 0xCA7C22, 0x35916F, 0xC5E008, 0x8DD7FF,
218 0x17552E, 0x550027, 0xF0147F, 0x8607E1, 0x640B14, 0x8D4196, 217 0xE26A6E, 0xC6FDB0, 0xC10893, 0x745D7C, 0xB2AD6B, 0x9D6ECD, 0x7B723E,
219 0xDEBE87, 0x2AFDDA, 0xB6256B, 0x34897B, 0xFEF305, 0x9EBFB9, 218 0x6A11C6, 0xA9CFF7, 0xDF7329, 0xBAC9B5, 0x5100B7, 0x0DB2E2, 0x24BA74,
220 0x4F6A68, 0xA82A4A, 0x5AC44F, 0xBCF82D, 0x985AD7, 0x95C7F4, 219 0x607DE5, 0x8AD874, 0x2C150D, 0x0C1881, 0x94667E, 0x162901, 0x767A9F,
221 0x8D4D0D, 0xA63A20, 0x5F57A4, 0xB13F14, 0x953880, 0x0120CC, 220 0xBEFDFD, 0xEF4556, 0x367ED9, 0x13D9EC, 0xB9BA8B, 0xFC97C4, 0x27A831,
222 0x86DD71, 0xB6DEC9, 0xF560BF, 0x11654D, 0x6B0701, 0xACB08C, 221 0xC36EF1, 0x36C594, 0x56A8D8, 0xB5A8B4, 0x0ECCCF, 0x2D8912, 0x34576F,
223 0xD0C0B2, 0x485551, 0x0EFB1E, 0xC37295, 0x3B06A3, 0x3540C0, 222 0x89562C, 0xE3CE99, 0xB920D6, 0xAA5E6B, 0x9C2A3E, 0xCC5F11, 0x4A0BFD,
224 0x7BDC06, 0xCC45E0, 0xFA294E, 0xC8CAD6, 0x41F3E8, 0xDE647C, 223 0xFBF4E1, 0x6D3B8E, 0x2C86E2, 0x84D4E9, 0xA9B4FC, 0xD1EEEF, 0xC9352E,
225 0xD8649B, 0x31BED9, 0xC397A4, 0xD45877, 0xC5E369, 0x13DAF0, 224 0x61392F, 0x442138, 0xC8D91B, 0x0AFC81, 0x6A4AFB, 0xD81C2F, 0x84B453,
226 0x3C3ABA, 0x461846, 0x5F7555, 0xF5BDD2, 0xC6926E, 0x5D2EAC, 225 0x8C994E, 0xCC2254, 0xDC552A, 0xD6C6C0, 0x96190B, 0xB8701A, 0x649569,
227 0xED440E, 0x423E1C, 0x87C461, 0xE9FD29, 0xF3D6E7, 0xCA7C22, 226 0x605A26, 0xEE523F, 0x0F117F, 0x11B5F4, 0xF5CBFC, 0x2DBC34, 0xEEBC34,
228 0x35916F, 0xC5E008, 0x8DD7FF, 0xE26A6E, 0xC6FDB0, 0xC10893, 227 0xCC5DE8, 0x605EDD, 0x9B8E67, 0xEF3392, 0xB817C9, 0x9B5861, 0xBC57E1,
229 0x745D7C, 0xB2AD6B, 0x9D6ECD, 0x7B723E, 0x6A11C6, 0xA9CFF7, 228 0xC68351, 0x103ED8, 0x4871DD, 0xDD1C2D, 0xA118AF, 0x462C21, 0xD7F359,
230 0xDF7329, 0xBAC9B5, 0x5100B7, 0x0DB2E2, 0x24BA74, 0x607DE5, 229 0x987AD9, 0xC0549E, 0xFA864F, 0xFC0656, 0xAE79E5, 0x362289, 0x22AD38,
231 0x8AD874, 0x2C150D, 0x0C1881, 0x94667E, 0x162901, 0x767A9F, 230 0xDC9367, 0xAAE855, 0x382682, 0x9BE7CA, 0xA40D51, 0xB13399, 0x0ED7A9,
232 0xBEFDFD, 0xEF4556, 0x367ED9, 0x13D9EC, 0xB9BA8B, 0xFC97C4, 231 0x480569, 0xF0B265, 0xA7887F, 0x974C88, 0x36D1F9, 0xB39221, 0x4A827B,
233 0x27A831, 0xC36EF1, 0x36C594, 0x56A8D8, 0xB5A8B4, 0x0ECCCF, 232 0x21CF98, 0xDC9F40, 0x5547DC, 0x3A74E1, 0x42EB67, 0xDF9DFE, 0x5FD45E,
234 0x2D8912, 0x34576F, 0x89562C, 0xE3CE99, 0xB920D6, 0xAA5E6B, 233 0xA4677B, 0x7AACBA, 0xA2F655, 0x23882B, 0x55BA41, 0x086E59, 0x862A21,
235 0x9C2A3E, 0xCC5F11, 0x4A0BFD, 0xFBF4E1, 0x6D3B8E, 0x2C86E2, 234 0x834739, 0xE6E389, 0xD49EE5, 0x40FB49, 0xE956FF, 0xCA0F1C, 0x8A59C5,
236 0x84D4E9, 0xA9B4FC, 0xD1EEEF, 0xC9352E, 0x61392F, 0x442138, 235 0x2BFA94, 0xC5C1D3, 0xCFC50F, 0xAE5ADB, 0x86C547, 0x624385, 0x3B8621,
237 0xC8D91B, 0x0AFC81, 0x6A4AFB, 0xD81C2F, 0x84B453, 0x8C994E, 236 0x94792C, 0x876110, 0x7B4C2A, 0x1A2C80, 0x12BF43, 0x902688, 0x893C78,
238 0xCC2254, 0xDC552A, 0xD6C6C0, 0x96190B, 0xB8701A, 0x649569, 237 0xE4C4A8, 0x7BDBE5, 0xC23AC4, 0xEAF426, 0x8A67F7, 0xBF920D, 0x2BA365,
239 0x605A26, 0xEE523F, 0x0F117F, 0x11B5F4, 0xF5CBFC, 0x2DBC34, 238 0xB1933D, 0x0B7CBD, 0xDC51A4, 0x63DD27, 0xDDE169, 0x19949A, 0x9529A8,
240 0xEEBC34, 0xCC5DE8, 0x605EDD, 0x9B8E67, 0xEF3392, 0xB817C9, 239 0x28CE68, 0xB4ED09, 0x209F44, 0xCA984E, 0x638270, 0x237C7E, 0x32B90F,
241 0x9B5861, 0xBC57E1, 0xC68351, 0x103ED8, 0x4871DD, 0xDD1C2D, 240 0x8EF5A7, 0xE75614, 0x08F121, 0x2A9DB5, 0x4D7E6F, 0x5119A5, 0xABF9B5,
242 0xA118AF, 0x462C21, 0xD7F359, 0x987AD9, 0xC0549E, 0xFA864F, 241 0xD6DF82, 0x61DD96, 0x023616, 0x9F3AC4, 0xA1A283, 0x6DED72, 0x7A8D39,
243 0xFC0656, 0xAE79E5, 0x362289, 0x22AD38, 0xDC9367, 0xAAE855, 242 0xA9B882, 0x5C326B, 0x5B2746, 0xED3400, 0x7700D2, 0x55F4FC, 0x4D5901,
244 0x382682, 0x9BE7CA, 0xA40D51, 0xB13399, 0x0ED7A9, 0x480569, 243 0x8071E0,
245 0xF0B265, 0xA7887F, 0x974C88, 0x36D1F9, 0xB39221, 0x4A827B,
246 0x21CF98, 0xDC9F40, 0x5547DC, 0x3A74E1, 0x42EB67, 0xDF9DFE,
247 0x5FD45E, 0xA4677B, 0x7AACBA, 0xA2F655, 0x23882B, 0x55BA41,
248 0x086E59, 0x862A21, 0x834739, 0xE6E389, 0xD49EE5, 0x40FB49,
249 0xE956FF, 0xCA0F1C, 0x8A59C5, 0x2BFA94, 0xC5C1D3, 0xCFC50F,
250 0xAE5ADB, 0x86C547, 0x624385, 0x3B8621, 0x94792C, 0x876110,
251 0x7B4C2A, 0x1A2C80, 0x12BF43, 0x902688, 0x893C78, 0xE4C4A8,
252 0x7BDBE5, 0xC23AC4, 0xEAF426, 0x8A67F7, 0xBF920D, 0x2BA365,
253 0xB1933D, 0x0B7CBD, 0xDC51A4, 0x63DD27, 0xDDE169, 0x19949A,
254 0x9529A8, 0x28CE68, 0xB4ED09, 0x209F44, 0xCA984E, 0x638270,
255 0x237C7E, 0x32B90F, 0x8EF5A7, 0xE75614, 0x08F121, 0x2A9DB5,
256 0x4D7E6F, 0x5119A5, 0xABF9B5, 0xD6DF82, 0x61DD96, 0x023616,
257 0x9F3AC4, 0xA1A283, 0x6DED72, 0x7A8D39, 0xA9B882, 0x5C326B,
258 0x5B2746, 0xED3400, 0x7700D2, 0x55F4FC, 0x4D5901, 0x8071E0,
259 #endif 244 #endif
260 }; 245 };
261 246
262 static const double PIo2[] = { 247 static const double PIo2[] = {
263 1.57079625129699707031e+00, /* 0x3FF921FB, 0x40000000 */ 248 1.57079625129699707031e+00, /* 0x3FF921FB, 0x40000000 */
264 7.54978941586159635335e-08, /* 0x3E74442D, 0x00000000 */ 249 7.54978941586159635335e-08, /* 0x3E74442D, 0x00000000 */
265 5.39030252995776476554e-15, /* 0x3CF84698, 0x80000000 */ 250 5.39030252995776476554e-15, /* 0x3CF84698, 0x80000000 */
266 3.28200341580791294123e-22, /* 0x3B78CC51, 0x60000000 */ 251 3.28200341580791294123e-22, /* 0x3B78CC51, 0x60000000 */
267 1.27065575308067607349e-29, /* 0x39F01B83, 0x80000000 */ 252 1.27065575308067607349e-29, /* 0x39F01B83, 0x80000000 */
268 1.22933308981111328932e-36, /* 0x387A2520, 0x40000000 */ 253 1.22933308981111328932e-36, /* 0x387A2520, 0x40000000 */
269 2.73370053816464559624e-44, /* 0x36E38222, 0x80000000 */ 254 2.73370053816464559624e-44, /* 0x36E38222, 0x80000000 */
270 2.16741683877804819444e-51, /* 0x3569F31D, 0x00000000 */ 255 2.16741683877804819444e-51, /* 0x3569F31D, 0x00000000 */
271 }; 256 };
272 257
273 int __rem_pio2_large(double *x, double *y, int e0, int nx, int prec) 258 int __rem_pio2_large(double* x, double* y, int e0, int nx, int prec) {
274 { 259 int32_t jz, jx, jv, jp, jk, carry, n, iq[20], i, j, k, m, q0, ih;
275 » int32_t jz,jx,jv,jp,jk,carry,n,iq[20],i,j,k,m,q0,ih; 260 double z, fw, f[20], fq[20], q[20];
276 » double z,fw,f[20],fq[20],q[20]; 261
277 262 /* initialize jk*/
278 » /* initialize jk*/ 263 jk = init_jk[prec];
279 » jk = init_jk[prec]; 264 jp = jk;
280 » jp = jk; 265
281 266 /* determine jx,jv,q0, note that 3>q0 */
282 » /* determine jx,jv,q0, note that 3>q0 */ 267 jx = nx - 1;
283 » jx = nx-1; 268 jv = (e0 - 3) / 24;
284 » jv = (e0-3)/24; if(jv<0) jv=0; 269 if (jv < 0)
285 » q0 = e0-24*(jv+1); 270 jv = 0;
286 271 q0 = e0 - 24 * (jv + 1);
287 » /* set up f[0] to f[jx+jk] where f[jx+jk] = ipio2[jv+jk] */ 272
288 » j = jv-jx; m = jx+jk; 273 /* set up f[0] to f[jx+jk] where f[jx+jk] = ipio2[jv+jk] */
289 » for (i=0; i<=m; i++,j++) 274 j = jv - jx;
290 » » f[i] = j<0 ? 0.0 : (double)ipio2[j]; 275 m = jx + jk;
291 276 for (i = 0; i <= m; i++, j++)
292 » /* compute q[0],q[1],...q[jk] */ 277 f[i] = j < 0 ? 0.0 : (double)ipio2[j];
293 » for (i=0; i<=jk; i++) { 278
294 » » for (j=0,fw=0.0; j<=jx; j++) 279 /* compute q[0],q[1],...q[jk] */
295 » » » fw += x[j]*f[jx+i-j]; 280 for (i = 0; i <= jk; i++) {
296 » » q[i] = fw; 281 for (j = 0, fw = 0.0; j <= jx; j++)
297 » } 282 fw += x[j] * f[jx + i - j];
298 283 q[i] = fw;
299 » jz = jk; 284 }
285
286 jz = jk;
300 recompute: 287 recompute:
301 » /* distill q[] into iq[] reversingly */ 288 /* distill q[] into iq[] reversingly */
302 » for (i=0,j=jz,z=q[jz]; j>0; i++,j--) { 289 for (i = 0, j = jz, z = q[jz]; j > 0; i++, j--) {
303 » » fw = (double)(int32_t)(0x1p-24*z); 290 fw = (double)(int32_t)(0x1p-24 * z);
304 » » iq[i] = (int32_t)(z - 0x1p24*fw); 291 iq[i] = (int32_t)(z - 0x1p24 * fw);
305 » » z = q[j-1]+fw; 292 z = q[j - 1] + fw;
306 » } 293 }
307 294
308 » /* compute n */ 295 /* compute n */
309 » z = scalbn(z,q0); /* actual value of z */ 296 z = scalbn(z, q0); /* actual value of z */
310 » z -= 8.0*floor(z*0.125); /* trim off integer >= 8 */ 297 z -= 8.0 * floor(z * 0.125); /* trim off integer >= 8 */
311 » n = (int32_t)z; 298 n = (int32_t)z;
312 » z -= (double)n; 299 z -= (double)n;
313 » ih = 0; 300 ih = 0;
314 » if (q0 > 0) { /* need iq[jz-1] to determine n */ 301 if (q0 > 0) { /* need iq[jz-1] to determine n */
315 » » i = iq[jz-1]>>(24-q0); n += i; 302 i = iq[jz - 1] >> (24 - q0);
316 » » iq[jz-1] -= i<<(24-q0); 303 n += i;
317 » » ih = iq[jz-1]>>(23-q0); 304 iq[jz - 1] -= i << (24 - q0);
318 » } 305 ih = iq[jz - 1] >> (23 - q0);
319 » else if (q0 == 0) ih = iq[jz-1]>>23; 306 } else if (q0 == 0)
320 » else if (z >= 0.5) ih = 2; 307 ih = iq[jz - 1] >> 23;
321 308 else if (z >= 0.5)
322 » if (ih > 0) { /* q > 0.5 */ 309 ih = 2;
323 » » n += 1; carry = 0; 310
324 » » for (i=0; i<jz; i++) { /* compute 1-q */ 311 if (ih > 0) { /* q > 0.5 */
325 » » » j = iq[i]; 312 n += 1;
326 » » » if (carry == 0) { 313 carry = 0;
327 » » » » if (j != 0) { 314 for (i = 0; i < jz; i++) { /* compute 1-q */
328 » » » » » carry = 1; 315 j = iq[i];
329 » » » » » iq[i] = 0x1000000 - j; 316 if (carry == 0) {
330 » » » » } 317 if (j != 0) {
331 » » » } else 318 carry = 1;
332 » » » » iq[i] = 0xffffff - j; 319 iq[i] = 0x1000000 - j;
333 » » } 320 }
334 » » if (q0 > 0) { /* rare case: chance is 1 in 12 */ 321 } else
335 » » » switch(q0) { 322 iq[i] = 0xffffff - j;
336 » » » case 1: 323 }
337 » » » » iq[jz-1] &= 0x7fffff; break; 324 if (q0 > 0) { /* rare case: chance is 1 in 12 */
338 » » » case 2: 325 switch (q0) {
339 » » » » iq[jz-1] &= 0x3fffff; break; 326 case 1:
340 » » » } 327 iq[jz - 1] &= 0x7fffff;
341 » » } 328 break;
342 » » if (ih == 2) { 329 case 2:
343 » » » z = 1.0 - z; 330 iq[jz - 1] &= 0x3fffff;
344 » » » if (carry != 0) 331 break;
345 » » » » z -= scalbn(1.0,q0); 332 }
346 » » } 333 }
347 » } 334 if (ih == 2) {
348 335 z = 1.0 - z;
349 » /* check if recomputation is needed */ 336 if (carry != 0)
350 » if (z == 0.0) { 337 z -= scalbn(1.0, q0);
351 » » j = 0; 338 }
352 » » for (i=jz-1; i>=jk; i--) j |= iq[i]; 339 }
353 » » if (j == 0) { /* need recomputation */ 340
354 » » » for (k=1; iq[jk-k]==0; k++); /* k = no. of terms needed */ 341 /* check if recomputation is needed */
355 342 if (z == 0.0) {
356 » » » for (i=jz+1; i<=jz+k; i++) { /* add q[jz+1] to q[jz+k] */ 343 j = 0;
357 » » » » f[jx+i] = (double)ipio2[jv+i]; 344 for (i = jz - 1; i >= jk; i--)
358 » » » » for (j=0,fw=0.0; j<=jx; j++) 345 j |= iq[i];
359 » » » » » fw += x[j]*f[jx+i-j]; 346 if (j == 0) { /* need recomputation */
360 » » » » q[i] = fw; 347 for (k = 1; iq[jk - k] == 0; k++)
361 » » » } 348 ; /* k = no. of terms needed */
362 » » » jz += k; 349
363 » » » goto recompute; 350 for (i = jz + 1; i <= jz + k; i++) { /* add q[jz+1] to q[jz+k] */
364 » » } 351 f[jx + i] = (double)ipio2[jv + i];
365 » } 352 for (j = 0, fw = 0.0; j <= jx; j++)
366 353 fw += x[j] * f[jx + i - j];
367 » /* chop off zero terms */ 354 q[i] = fw;
368 » if (z == 0.0) { 355 }
369 » » jz -= 1; 356 jz += k;
370 » » q0 -= 24; 357 goto recompute;
371 » » while (iq[jz] == 0) { 358 }
372 » » » jz--; 359 }
373 » » » q0 -= 24; 360
374 » » } 361 /* chop off zero terms */
375 » } else { /* break z into 24-bit if necessary */ 362 if (z == 0.0) {
376 » » z = scalbn(z,-q0); 363 jz -= 1;
377 » » if (z >= 0x1p24) { 364 q0 -= 24;
378 » » » fw = (double)(int32_t)(0x1p-24*z); 365 while (iq[jz] == 0) {
379 » » » iq[jz] = (int32_t)(z - 0x1p24*fw); 366 jz--;
380 » » » jz += 1; 367 q0 -= 24;
381 » » » q0 += 24; 368 }
382 » » » iq[jz] = (int32_t)fw; 369 } else { /* break z into 24-bit if necessary */
383 » » } else 370 z = scalbn(z, -q0);
384 » » » iq[jz] = (int32_t)z; 371 if (z >= 0x1p24) {
385 » } 372 fw = (double)(int32_t)(0x1p-24 * z);
386 373 iq[jz] = (int32_t)(z - 0x1p24 * fw);
387 » /* convert integer "bit" chunk to floating-point value */ 374 jz += 1;
388 » fw = scalbn(1.0,q0); 375 q0 += 24;
389 » for (i=jz; i>=0; i--) { 376 iq[jz] = (int32_t)fw;
390 » » q[i] = fw*(double)iq[i]; 377 } else
391 » » fw *= 0x1p-24; 378 iq[jz] = (int32_t)z;
392 » } 379 }
393 380
394 » /* compute PIo2[0,...,jp]*q[jz,...,0] */ 381 /* convert integer "bit" chunk to floating-point value */
395 » for(i=jz; i>=0; i--) { 382 fw = scalbn(1.0, q0);
396 » » for (fw=0.0,k=0; k<=jp && k<=jz-i; k++) 383 for (i = jz; i >= 0; i--) {
397 » » » fw += PIo2[k]*q[i+k]; 384 q[i] = fw * (double)iq[i];
398 » » fq[jz-i] = fw; 385 fw *= 0x1p-24;
399 » } 386 }
400 387
401 » /* compress fq[] into y[] */ 388 /* compute PIo2[0,...,jp]*q[jz,...,0] */
402 » switch(prec) { 389 for (i = jz; i >= 0; i--) {
403 » case 0: 390 for (fw = 0.0, k = 0; k <= jp && k <= jz - i; k++)
404 » » fw = 0.0; 391 fw += PIo2[k] * q[i + k];
405 » » for (i=jz; i>=0; i--) 392 fq[jz - i] = fw;
406 » » » fw += fq[i]; 393 }
407 » » y[0] = ih==0 ? fw : -fw; 394
408 » » break; 395 /* compress fq[] into y[] */
409 » case 1: 396 switch (prec) {
410 » case 2: 397 case 0:
411 » » fw = 0.0; 398 fw = 0.0;
412 » » for (i=jz; i>=0; i--) 399 for (i = jz; i >= 0; i--)
413 » » » fw += fq[i]; 400 fw += fq[i];
414 » » // TODO: drop excess precision here once double_t is used 401 y[0] = ih == 0 ? fw : -fw;
415 » » fw = (double)fw; 402 break;
416 » » y[0] = ih==0 ? fw : -fw; 403 case 1:
417 » » fw = fq[0]-fw; 404 case 2:
418 » » for (i=1; i<=jz; i++) 405 fw = 0.0;
419 » » » fw += fq[i]; 406 for (i = jz; i >= 0; i--)
420 » » y[1] = ih==0 ? fw : -fw; 407 fw += fq[i];
421 » » break; 408 // TODO: drop excess precision here once double_t is used
422 » case 3: /* painful */ 409 fw = (double)fw;
423 » » for (i=jz; i>0; i--) { 410 y[0] = ih == 0 ? fw : -fw;
424 » » » fw = fq[i-1]+fq[i]; 411 fw = fq[0] - fw;
425 » » » fq[i] += fq[i-1]-fw; 412 for (i = 1; i <= jz; i++)
426 » » » fq[i-1] = fw; 413 fw += fq[i];
427 » » } 414 y[1] = ih == 0 ? fw : -fw;
428 » » for (i=jz; i>1; i--) { 415 break;
429 » » » fw = fq[i-1]+fq[i]; 416 case 3: /* painful */
430 » » » fq[i] += fq[i-1]-fw; 417 for (i = jz; i > 0; i--) {
431 » » » fq[i-1] = fw; 418 fw = fq[i - 1] + fq[i];
432 » » } 419 fq[i] += fq[i - 1] - fw;
433 » » for (fw=0.0,i=jz; i>=2; i--) 420 fq[i - 1] = fw;
434 » » » fw += fq[i]; 421 }
435 » » if (ih==0) { 422 for (i = jz; i > 1; i--) {
436 » » » y[0] = fq[0]; y[1] = fq[1]; y[2] = fw; 423 fw = fq[i - 1] + fq[i];
437 » » } else { 424 fq[i] += fq[i - 1] - fw;
438 » » » y[0] = -fq[0]; y[1] = -fq[1]; y[2] = -fw; 425 fq[i - 1] = fw;
439 » » } 426 }
440 » } 427 for (fw = 0.0, i = jz; i >= 2; i--)
441 » return n&7; 428 fw += fq[i];
429 if (ih == 0) {
430 y[0] = fq[0];
431 y[1] = fq[1];
432 y[2] = fw;
433 } else {
434 y[0] = -fq[0];
435 y[1] = -fq[1];
436 y[2] = -fw;
437 }
438 }
439 return n & 7;
442 } 440 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698