Upgrade MPFR from 3.1.0 to 3.1.2 on the vendor branch
[dragonfly.git] / contrib / mpfr / src / mpfr-gmp.c
1 /* mpfr_gmp -- Limited gmp-impl emulator
2    Modified version of the GMP files.
3
4 Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc.
5 Contributed by the AriC and Caramel projects, INRIA.
6
7 This file is part of the GNU MPFR Library.
8
9 The GNU MPFR Library is free software; you can redistribute it and/or modify
10 it under the terms of the GNU Lesser General Public License as published by
11 the Free Software Foundation; either version 3 of the License, or (at your
12 option) any later version.
13
14 The GNU MPFR Library is distributed in the hope that it will be useful, but
15 WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16 or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
17 License for more details.
18
19 You should have received a copy of the GNU Lesser General Public License
20 along with the GNU MPFR Library; see the file COPYING.LESSER.  If not, see
21 http://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
22 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */
23
24 #include <stdlib.h> /* For malloc, free, realloc and abort */
25
26 #include "mpfr-impl.h"
27
28 #ifndef MPFR_HAVE_GMP_IMPL
29
30 char             mpfr_rands_initialized = 0;
31 gmp_randstate_t  mpfr_rands;
32
33 const struct bases mpfr_bases[257] =
34 {
35   /*  0 */ {0.0},
36   /*  1 */ {1e37},
37   /*  2 */ {1.0000000000000000},
38   /*  3 */ {0.6309297535714574},
39   /*  4 */ {0.5000000000000000},
40   /*  5 */ {0.4306765580733931},
41   /*  6 */ {0.3868528072345416},
42   /*  7 */ {0.3562071871080222},
43   /*  8 */ {0.3333333333333333},
44   /*  9 */ {0.3154648767857287},
45   /* 10 */ {0.3010299956639812},
46   /* 11 */ {0.2890648263178878},
47   /* 12 */ {0.2789429456511298},
48   /* 13 */ {0.2702381544273197},
49   /* 14 */ {0.2626495350371935},
50   /* 15 */ {0.2559580248098155},
51   /* 16 */ {0.2500000000000000},
52   /* 17 */ {0.2446505421182260},
53   /* 18 */ {0.2398124665681314},
54   /* 19 */ {0.2354089133666382},
55   /* 20 */ {0.2313782131597592},
56   /* 21 */ {0.2276702486969530},
57   /* 22 */ {0.2242438242175754},
58   /* 23 */ {0.2210647294575037},
59   /* 24 */ {0.2181042919855316},
60   /* 25 */ {0.2153382790366965},
61   /* 26 */ {0.2127460535533632},
62   /* 27 */ {0.2103099178571525},
63   /* 28 */ {0.2080145976765095},
64   /* 29 */ {0.2058468324604344},
65   /* 30 */ {0.2037950470905062},
66   /* 31 */ {0.2018490865820999},
67   /* 32 */ {0.2000000000000000},
68   /* 33 */ {0.1982398631705605},
69   /* 34 */ {0.1965616322328226},
70   /* 35 */ {0.1949590218937863},
71   /* 36 */ {0.1934264036172708},
72   /* 37 */ {0.1919587200065601},
73   /* 38 */ {0.1905514124267734},
74   /* 39 */ {0.1892003595168700},
75   /* 40 */ {0.1879018247091076},
76   /* 41 */ {0.1866524112389434},
77   /* 42 */ {0.1854490234153689},
78   /* 43 */ {0.1842888331487062},
79   /* 44 */ {0.1831692509136336},
80   /* 45 */ {0.1820879004699383},
81   /* 46 */ {0.1810425967800402},
82   /* 47 */ {0.1800313266566926},
83   /* 48 */ {0.1790522317510414},
84   /* 49 */ {0.1781035935540111},
85   /* 50 */ {0.1771838201355579},
86   /* 51 */ {0.1762914343888821},
87   /* 52 */ {0.1754250635819545},
88   /* 53 */ {0.1745834300480449},
89   /* 54 */ {0.1737653428714400},
90   /* 55 */ {0.1729696904450771},
91   /* 56 */ {0.1721954337940981},
92   /* 57 */ {0.1714416005739134},
93   /* 58 */ {0.1707072796637201},
94   /* 59 */ {0.1699916162869140},
95   /* 60 */ {0.1692938075987814},
96   /* 61 */ {0.1686130986895011},
97   /* 62 */ {0.1679487789570419},
98   /* 63 */ {0.1673001788101741},
99   /* 64 */ {0.1666666666666667},
100   /* 65 */ {0.1660476462159378},
101   /* 66 */ {0.1654425539190583},
102   /* 67 */ {0.1648508567221603},
103   /* 68 */ {0.1642720499620502},
104   /* 69 */ {0.1637056554452156},
105   /* 70 */ {0.1631512196835108},
106   /* 71 */ {0.1626083122716342},
107   /* 72 */ {0.1620765243931223},
108   /* 73 */ {0.1615554674429964},
109   /* 74 */ {0.1610447717564444},
110   /* 75 */ {0.1605440854340214},
111   /* 76 */ {0.1600530732548213},
112   /* 77 */ {0.1595714156699382},
113   /* 78 */ {0.1590988078692941},
114   /* 79 */ {0.1586349589155960},
115   /* 80 */ {0.1581795909397823},
116   /* 81 */ {0.1577324383928644},
117   /* 82 */ {0.1572932473495469},
118   /* 83 */ {0.1568617748594410},
119   /* 84 */ {0.1564377883420715},
120   /* 85 */ {0.1560210650222250},
121   /* 86 */ {0.1556113914024939},
122   /* 87 */ {0.1552085627701551},
123   /* 88 */ {0.1548123827357682},
124   /* 89 */ {0.1544226628011101},
125   /* 90 */ {0.1540392219542636},
126   /* 91 */ {0.1536618862898642},
127   /* 92 */ {0.1532904886526781},
128   /* 93 */ {0.1529248683028321},
129   /* 94 */ {0.1525648706011593},
130   /* 95 */ {0.1522103467132434},
131   /* 96 */ {0.1518611533308632},
132   /* 97 */ {0.1515171524096389},
133   /* 98 */ {0.1511782109217764},
134   /* 99 */ {0.1508442006228941},
135   /* 100 */ {0.1505149978319906},
136   /* 101 */ {0.1501904832236880},
137   /* 102 */ {0.1498705416319474},
138   /* 103 */ {0.1495550618645152},
139   /* 104 */ {0.1492439365274121},
140   /* 105 */ {0.1489370618588283},
141   /* 106 */ {0.1486343375718350},
142   /* 107 */ {0.1483356667053617},
143   /* 108 */ {0.1480409554829326},
144   /* 109 */ {0.1477501131786861},
145   /* 110 */ {0.1474630519902391},
146   /* 111 */ {0.1471796869179852},
147   /* 112 */ {0.1468999356504447},
148   /* 113 */ {0.1466237184553111},
149   /* 114 */ {0.1463509580758620},
150   /* 115 */ {0.1460815796324244},
151   /* 116 */ {0.1458155105286054},
152   /* 117 */ {0.1455526803620167},
153   /* 118 */ {0.1452930208392429},
154   /* 119 */ {0.1450364656948130},
155   /* 120 */ {0.1447829506139581},
156   /* 121 */ {0.1445324131589439},
157   /* 122 */ {0.1442847926987864},
158   /* 123 */ {0.1440400303421672},
159   /* 124 */ {0.1437980688733776},
160   /* 125 */ {0.1435588526911310},
161   /* 126 */ {0.1433223277500932},
162   /* 127 */ {0.1430884415049874},
163   /* 128 */ {0.1428571428571428},
164   /* 129 */ {0.1426283821033600},
165   /* 130 */ {0.1424021108869747},
166   /* 131 */ {0.1421782821510107},
167   /* 132 */ {0.1419568500933153},
168   /* 133 */ {0.1417377701235801},
169   /* 134 */ {0.1415209988221527},
170   /* 135 */ {0.1413064939005528},
171   /* 136 */ {0.1410942141636095},
172   /* 137 */ {0.1408841194731412},
173   /* 138 */ {0.1406761707131039},
174   /* 139 */ {0.1404703297561400},
175   /* 140 */ {0.1402665594314587},
176   /* 141 */ {0.1400648234939879},
177   /* 142 */ {0.1398650865947379},
178   /* 143 */ {0.1396673142523192},
179   /* 144 */ {0.1394714728255649},
180   /* 145 */ {0.1392775294872041},
181   /* 146 */ {0.1390854521985406},
182   /* 147 */ {0.1388952096850913},
183   /* 148 */ {0.1387067714131417},
184   /* 149 */ {0.1385201075671774},
185   /* 150 */ {0.1383351890281539},
186   /* 151 */ {0.1381519873525671},
187   /* 152 */ {0.1379704747522905},
188   /* 153 */ {0.1377906240751463},
189   /* 154 */ {0.1376124087861776},
190   /* 155 */ {0.1374358029495937},
191   /* 156 */ {0.1372607812113589},
192   /* 157 */ {0.1370873187823978},
193   /* 158 */ {0.1369153914223921},
194   /* 159 */ {0.1367449754241439},
195   /* 160 */ {0.1365760475984821},
196   /* 161 */ {0.1364085852596902},
197   /* 162 */ {0.1362425662114337},
198   /* 163 */ {0.1360779687331669},
199   /* 164 */ {0.1359147715670014},
200   /* 165 */ {0.1357529539050150},
201   /* 166 */ {0.1355924953769864},
202   /* 167 */ {0.1354333760385373},
203   /* 168 */ {0.1352755763596663},
204   /* 169 */ {0.1351190772136599},
205   /* 170 */ {0.1349638598663645},
206   /* 171 */ {0.1348099059658080},
207   /* 172 */ {0.1346571975321549},
208   /* 173 */ {0.1345057169479844},
209   /* 174 */ {0.1343554469488779},
210   /* 175 */ {0.1342063706143054},
211   /* 176 */ {0.1340584713587979},
212   /* 177 */ {0.1339117329233981},
213   /* 178 */ {0.1337661393673756},
214   /* 179 */ {0.1336216750601996},
215   /* 180 */ {0.1334783246737591},
216   /* 181 */ {0.1333360731748201},
217   /* 182 */ {0.1331949058177136},
218   /* 183 */ {0.1330548081372441},
219   /* 184 */ {0.1329157659418126},
220   /* 185 */ {0.1327777653067443},
221   /* 186 */ {0.1326407925678156},
222   /* 187 */ {0.1325048343149731},
223   /* 188 */ {0.1323698773862368},
224   /* 189 */ {0.1322359088617821},
225   /* 190 */ {0.1321029160581950},
226   /* 191 */ {0.1319708865228925},
227   /* 192 */ {0.1318398080287045},
228   /* 193 */ {0.1317096685686114},
229   /* 194 */ {0.1315804563506306},
230   /* 195 */ {0.1314521597928493},
231   /* 196 */ {0.1313247675185968},
232   /* 197 */ {0.1311982683517524},
233   /* 198 */ {0.1310726513121843},
234   /* 199 */ {0.1309479056113158},
235   /* 200 */ {0.1308240206478128},
236   /* 201 */ {0.1307009860033912},
237   /* 202 */ {0.1305787914387386},
238   /* 203 */ {0.1304574268895465},
239   /* 204 */ {0.1303368824626505},
240   /* 205 */ {0.1302171484322746},
241   /* 206 */ {0.1300982152363760},
242   /* 207 */ {0.1299800734730872},
243   /* 208 */ {0.1298627138972530},
244   /* 209 */ {0.1297461274170591},
245   /* 210 */ {0.1296303050907487},
246   /* 211 */ {0.1295152381234257},
247   /* 212 */ {0.1294009178639407},
248   /* 213 */ {0.1292873358018581},
249   /* 214 */ {0.1291744835645007},
250   /* 215 */ {0.1290623529140715},
251   /* 216 */ {0.1289509357448472},
252   /* 217 */ {0.1288402240804449},
253   /* 218 */ {0.1287302100711566},
254   /* 219 */ {0.1286208859913518},
255   /* 220 */ {0.1285122442369443},
256   /* 221 */ {0.1284042773229231},
257   /* 222 */ {0.1282969778809442},
258   /* 223 */ {0.1281903386569819},
259   /* 224 */ {0.1280843525090381},
260   /* 225 */ {0.1279790124049077},
261   /* 226 */ {0.1278743114199984},
262   /* 227 */ {0.1277702427352035},
263   /* 228 */ {0.1276667996348261},
264   /* 229 */ {0.1275639755045533},
265   /* 230 */ {0.1274617638294791},
266   /* 231 */ {0.1273601581921740},
267   /* 232 */ {0.1272591522708010},
268   /* 233 */ {0.1271587398372755},
269   /* 234 */ {0.1270589147554692},
270   /* 235 */ {0.1269596709794558},
271   /* 236 */ {0.1268610025517973},
272   /* 237 */ {0.1267629036018709},
273   /* 238 */ {0.1266653683442337},
274   /* 239 */ {0.1265683910770258},
275   /* 240 */ {0.1264719661804097},
276   /* 241 */ {0.1263760881150453},
277   /* 242 */ {0.1262807514205999},
278   /* 243 */ {0.1261859507142915},
279   /* 244 */ {0.1260916806894653},
280   /* 245 */ {0.1259979361142023},
281   /* 246 */ {0.1259047118299582},
282   /* 247 */ {0.1258120027502338},
283   /* 248 */ {0.1257198038592741},
284   /* 249 */ {0.1256281102107963},
285   /* 250 */ {0.1255369169267456},
286   /* 251 */ {0.1254462191960791},
287   /* 252 */ {0.1253560122735751},
288   /* 253 */ {0.1252662914786691},
289   /* 254 */ {0.1251770521943144},
290   /* 255 */ {0.1250882898658681},
291   /* 256 */ {0.1250000000000000},
292 };
293
294 void
295 mpfr_assert_fail (const char *filename, int linenum,
296                      const char *expr)
297 {
298   if (filename != NULL && filename[0] != '\0')
299     {
300       fprintf (stderr, "%s:", filename);
301       if (linenum != -1)
302         fprintf (stderr, "%d: ", linenum);
303     }
304   fprintf (stderr, "MPFR assertion failed: %s\n", expr);
305   abort();
306 }
307
308 #ifdef mp_get_memory_functions
309
310 /* putting 0 as initial values forces those symbols to be fully defined,
311    and always resolved, otherwise they are only tentatively defined, which
312    leads to problems on e.g. MacOS, cf
313    http://lists.gforge.inria.fr/pipermail/mpc-discuss/2008-November/000048.html
314    and http://software.intel.com/en-us/articles/intelr-fortran-compiler-for-mac-os-non_lazy_ptr-unresolved-references-from-linking
315    Note that using ranlib -c or libtool -c is another fix.
316 */
317 void * (*mpfr_allocate_func) (size_t) = 0;
318 void * (*mpfr_reallocate_func) (void *,size_t, size_t) = 0;
319 void   (*mpfr_free_func) (void *, size_t) = 0;
320
321 #endif
322
323 void *
324 mpfr_default_allocate (size_t size)
325 {
326   void *ret;
327   ret = malloc (size);
328   if (ret == NULL)
329     {
330       fprintf (stderr, "MPFR: Can't allocate memory (size=%lu)\n",
331                (unsigned long) size);
332       abort ();
333     }
334   return ret;
335 }
336
337 void *
338 mpfr_default_reallocate (void *oldptr, size_t old_size, size_t new_size)
339 {
340   void *ret;
341   ret = realloc (oldptr, new_size);
342   if (ret == NULL)
343     {
344       fprintf (stderr,
345                "MPFR: Can't reallocate memory (old_size=%lu new_size=%lu)\n",
346                (unsigned long) old_size, (unsigned long) new_size);
347       abort ();
348     }
349   return ret;
350 }
351
352 void
353 mpfr_default_free (void *blk_ptr, size_t blk_size)
354 {
355   free (blk_ptr);
356 }
357
358 void *
359 mpfr_tmp_allocate (struct tmp_marker **tmp_marker, size_t size)
360 {
361   struct tmp_marker *head;
362
363   head = (struct tmp_marker *)
364     mpfr_default_allocate (sizeof (struct tmp_marker));
365   head->ptr = mpfr_default_allocate (size);
366   head->size = size;
367   head->next = *tmp_marker;
368   *tmp_marker = head;
369   return head->ptr;
370 }
371
372 void
373 mpfr_tmp_free (struct tmp_marker *tmp_marker)
374 {
375   struct tmp_marker *t;
376
377   while (tmp_marker != NULL)
378     {
379       t = tmp_marker;
380       mpfr_default_free (t->ptr, t->size);
381       tmp_marker = t->next;
382       mpfr_default_free (t, sizeof (struct tmp_marker));
383     }
384 }
385
386 #endif /* Have gmp-impl.h */