Hex Artifact Content
Not logged in

Artifact 23796b3eba3a31e800fdb02d58dc67341339583a:


0000: 2f 2a 20 6d 70 66 72 20 65 78 70 72 65 73 73 69  /* mpfr expressi
0010: 6f 6e 20 65 76 61 6c 75 61 74 69 6f 6e 2e 0a 0a  on evaluation...
0020: 43 6f 70 79 72 69 67 68 74 20 32 30 30 30 2c 20  Copyright 2000, 
0030: 32 30 30 31 2c 20 32 30 30 32 20 46 72 65 65 20  2001, 2002 Free 
0040: 53 6f 66 74 77 61 72 65 20 46 6f 75 6e 64 61 74  Software Foundat
0050: 69 6f 6e 2c 20 49 6e 63 2e 0a 0a 54 68 69 73 20  ion, Inc...This 
0060: 66 69 6c 65 20 69 73 20 70 61 72 74 20 6f 66 20  file is part of 
0070: 74 68 65 20 47 4e 55 20 4d 50 20 4c 69 62 72 61  the GNU MP Libra
0080: 72 79 2e 0a 0a 54 68 65 20 47 4e 55 20 4d 50 20  ry...The GNU MP 
0090: 4c 69 62 72 61 72 79 20 69 73 20 66 72 65 65 20  Library is free 
00a0: 73 6f 66 74 77 61 72 65 3b 20 79 6f 75 20 63 61  software; you ca
00b0: 6e 20 72 65 64 69 73 74 72 69 62 75 74 65 20 69  n redistribute i
00c0: 74 20 61 6e 64 2f 6f 72 20 6d 6f 64 69 66 79 0a  t and/or modify.
00d0: 69 74 20 75 6e 64 65 72 20 74 68 65 20 74 65 72  it under the ter
00e0: 6d 73 20 6f 66 20 74 68 65 20 47 4e 55 20 4c 65  ms of the GNU Le
00f0: 73 73 65 72 20 47 65 6e 65 72 61 6c 20 50 75 62  sser General Pub
0100: 6c 69 63 20 4c 69 63 65 6e 73 65 20 61 73 20 70  lic License as p
0110: 75 62 6c 69 73 68 65 64 20 62 79 0a 74 68 65 20  ublished by.the 
0120: 46 72 65 65 20 53 6f 66 74 77 61 72 65 20 46 6f  Free Software Fo
0130: 75 6e 64 61 74 69 6f 6e 3b 20 65 69 74 68 65 72  undation; either
0140: 20 76 65 72 73 69 6f 6e 20 32 2e 31 20 6f 66 20   version 2.1 of 
0150: 74 68 65 20 4c 69 63 65 6e 73 65 2c 20 6f 72 20  the License, or 
0160: 28 61 74 20 79 6f 75 72 0a 6f 70 74 69 6f 6e 29  (at your.option)
0170: 20 61 6e 79 20 6c 61 74 65 72 20 76 65 72 73 69   any later versi
0180: 6f 6e 2e 0a 0a 54 68 65 20 47 4e 55 20 4d 50 20  on...The GNU MP 
0190: 4c 69 62 72 61 72 79 20 69 73 20 64 69 73 74 72  Library is distr
01a0: 69 62 75 74 65 64 20 69 6e 20 74 68 65 20 68 6f  ibuted in the ho
01b0: 70 65 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20  pe that it will 
01c0: 62 65 20 75 73 65 66 75 6c 2c 20 62 75 74 0a 57  be useful, but.W
01d0: 49 54 48 4f 55 54 20 41 4e 59 20 57 41 52 52 41  ITHOUT ANY WARRA
01e0: 4e 54 59 3b 20 77 69 74 68 6f 75 74 20 65 76 65  NTY; without eve
01f0: 6e 20 74 68 65 20 69 6d 70 6c 69 65 64 20 77 61  n the implied wa
0200: 72 72 61 6e 74 79 20 6f 66 20 4d 45 52 43 48 41  rranty of MERCHA
0210: 4e 54 41 42 49 4c 49 54 59 0a 6f 72 20 46 49 54  NTABILITY.or FIT
0220: 4e 45 53 53 20 46 4f 52 20 41 20 50 41 52 54 49  NESS FOR A PARTI
0230: 43 55 4c 41 52 20 50 55 52 50 4f 53 45 2e 20 20  CULAR PURPOSE.  
0240: 53 65 65 20 74 68 65 20 47 4e 55 20 4c 65 73 73  See the GNU Less
0250: 65 72 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69  er General Publi
0260: 63 0a 4c 69 63 65 6e 73 65 20 66 6f 72 20 6d 6f  c.License for mo
0270: 72 65 20 64 65 74 61 69 6c 73 2e 0a 0a 59 6f 75  re details...You
0280: 20 73 68 6f 75 6c 64 20 68 61 76 65 20 72 65 63   should have rec
0290: 65 69 76 65 64 20 61 20 63 6f 70 79 20 6f 66 20  eived a copy of 
02a0: 74 68 65 20 47 4e 55 20 4c 65 73 73 65 72 20 47  the GNU Lesser G
02b0: 65 6e 65 72 61 6c 20 50 75 62 6c 69 63 20 4c 69  eneral Public Li
02c0: 63 65 6e 73 65 0a 61 6c 6f 6e 67 20 77 69 74 68  cense.along with
02d0: 20 74 68 65 20 47 4e 55 20 4d 50 20 4c 69 62 72   the GNU MP Libr
02e0: 61 72 79 3b 20 73 65 65 20 74 68 65 20 66 69 6c  ary; see the fil
02f0: 65 20 43 4f 50 59 49 4e 47 2e 4c 49 42 2e 20 20  e COPYING.LIB.  
0300: 49 66 20 6e 6f 74 2c 20 77 72 69 74 65 20 74 6f  If not, write to
0310: 0a 74 68 65 20 46 72 65 65 20 53 6f 66 74 77 61  .the Free Softwa
0320: 72 65 20 46 6f 75 6e 64 61 74 69 6f 6e 2c 20 49  re Foundation, I
0330: 6e 63 2e 2c 20 35 39 20 54 65 6d 70 6c 65 20 50  nc., 59 Temple P
0340: 6c 61 63 65 20 2d 20 53 75 69 74 65 20 33 33 30  lace - Suite 330
0350: 2c 20 42 6f 73 74 6f 6e 2c 0a 4d 41 20 30 32 31  , Boston,.MA 021
0360: 31 31 2d 31 33 30 37 2c 20 55 53 41 2e 20 2a 2f  11-1307, USA. */
0370: 0a 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69  ..#include <stdi
0380: 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 22 67  o.h>.#include "g
0390: 6d 70 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  mp.h".#include "
03a0: 65 78 70 72 2d 69 6d 70 6c 2e 68 22 0a 0a 0a 2f  expr-impl.h".../
03b0: 2a 20 43 68 61 6e 67 65 20 74 68 69 73 20 74 6f  * Change this to
03c0: 20 22 23 64 65 66 69 6e 65 20 54 52 41 43 45 28   "#define TRACE(
03d0: 78 29 20 78 22 20 74 6f 20 67 65 74 20 73 6f 6d  x) x" to get som
03e0: 65 20 74 72 61 63 65 73 2e 20 2a 2f 0a 23 64 65  e traces. */.#de
03f0: 66 69 6e 65 20 54 52 41 43 45 28 78 29 0a 0a 0a  fine TRACE(x)...
0400: 2f 2a 20 54 68 69 73 20 73 65 74 20 6f 66 20 66  /* This set of f
0410: 75 6e 63 74 69 6f 6e 73 20 6d 61 6b 65 73 20 69  unctions makes i
0420: 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 61 64  t possible to ad
0430: 64 20 74 68 65 20 52 4f 55 4e 44 20 70 61 72 61  d the ROUND para
0440: 6d 65 74 65 72 2c 20 61 6e 64 20 61 0a 20 20 20  meter, and a.   
0450: 66 65 77 20 6f 66 20 74 68 65 20 6d 70 66 72 27  few of the mpfr'
0460: 73 20 61 72 65 20 6d 61 63 72 6f 73 20 61 6e 64  s are macros and
0470: 20 6e 65 65 64 20 61 20 77 72 61 70 70 65 72 20   need a wrapper 
0480: 61 6e 79 77 61 79 2e 0a 0a 20 20 20 41 20 77 68  anyway...   A wh
0490: 6f 6c 65 20 6e 65 77 20 73 65 74 20 6f 66 20 66  ole new set of f
04a0: 75 6e 63 74 69 6f 6e 73 20 6c 69 6b 65 20 74 68  unctions like th
04b0: 69 73 20 6a 75 73 74 20 74 6f 20 61 64 64 20 61  is just to add a
04c0: 20 72 6f 75 6e 64 69 6e 67 20 70 61 72 61 6d 65   rounding parame
04d0: 74 65 72 0a 20 20 20 69 73 20 61 20 62 69 74 20  ter.   is a bit 
04e0: 68 6f 72 72 69 62 6c 65 2c 20 62 75 74 20 69 74  horrible, but it
04f0: 27 73 20 74 68 65 20 65 61 73 69 65 73 74 20 77  's the easiest w
0500: 61 79 2e 20 20 54 68 65 72 65 20 64 6f 65 73 6e  ay.  There doesn
0510: 27 74 20 73 65 65 6d 20 6d 75 63 68 20 75 73 65  't seem much use
0520: 0a 20 20 20 68 61 76 69 6e 67 20 72 6f 75 6e 64  .   having round
0530: 69 6e 67 20 70 61 73 73 65 64 20 64 6f 77 6e 20  ing passed down 
0540: 74 68 72 6f 75 67 68 20 6d 70 66 72 5f 65 78 70  through mpfr_exp
0550: 72 5f 61 2c 20 73 69 6e 63 65 20 61 20 73 69 6e  r_a, since a sin
0560: 67 6c 65 20 72 6f 75 6e 64 69 6e 67 0a 20 20 20  gle rounding.   
0570: 66 6f 72 20 61 6c 6c 20 6f 70 65 72 61 74 69 6f  for all operatio
0580: 6e 73 20 69 6e 20 61 6e 20 65 78 70 72 65 73 73  ns in an express
0590: 69 6f 6e 20 64 6f 65 73 6e 27 74 20 67 69 76 65  ion doesn't give
05a0: 20 63 6c 6f 73 65 20 65 6e 6f 75 67 68 20 63 6f   close enough co
05b0: 6e 74 72 6f 6c 20 74 6f 0a 20 20 20 62 65 20 75  ntrol to.   be u
05c0: 73 65 66 75 6c 2e 20 20 2a 2f 0a 0a 73 74 61 74  seful.  */..stat
05d0: 69 63 20 76 6f 69 64 0a 65 5f 6d 70 66 72 5f 61  ic void.e_mpfr_a
05e0: 62 73 20 28 6d 70 66 72 5f 70 74 72 20 64 73 74  bs (mpfr_ptr dst
05f0: 2c 20 6d 70 66 72 5f 73 72 63 70 74 72 20 73 72  , mpfr_srcptr sr
0600: 63 29 0a 7b 0a 20 20 6d 70 66 72 5f 61 62 73 20  c).{.  mpfr_abs 
0610: 28 64 73 74 2c 20 73 72 63 2c 20 52 4f 55 4e 44  (dst, src, ROUND
0620: 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69  );.}..static voi
0630: 64 0a 65 5f 6d 70 66 72 5f 61 63 6f 73 20 28 6d  d.e_mpfr_acos (m
0640: 70 66 72 5f 70 74 72 20 64 73 74 2c 20 6d 70 66  pfr_ptr dst, mpf
0650: 72 5f 73 72 63 70 74 72 20 73 72 63 29 0a 7b 0a  r_srcptr src).{.
0660: 20 20 6d 70 66 72 5f 61 63 6f 73 20 28 64 73 74    mpfr_acos (dst
0670: 2c 20 73 72 63 2c 20 52 4f 55 4e 44 29 3b 0a 7d  , src, ROUND);.}
0680: 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 0a 65 5f  ..static void.e_
0690: 6d 70 66 72 5f 61 64 64 20 28 6d 70 66 72 5f 70  mpfr_add (mpfr_p
06a0: 74 72 20 64 73 74 2c 20 6d 70 66 72 5f 73 72 63  tr dst, mpfr_src
06b0: 70 74 72 20 73 72 63 31 2c 20 6d 70 66 72 5f 73  ptr src1, mpfr_s
06c0: 72 63 70 74 72 20 73 72 63 32 29 0a 7b 0a 20 20  rcptr src2).{.  
06d0: 6d 70 66 72 5f 61 64 64 20 28 64 73 74 2c 20 73  mpfr_add (dst, s
06e0: 72 63 31 2c 20 73 72 63 32 2c 20 52 4f 55 4e 44  rc1, src2, ROUND
06f0: 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69  );.}..static voi
0700: 64 0a 65 5f 6d 70 66 72 5f 61 67 6d 20 28 6d 70  d.e_mpfr_agm (mp
0710: 66 72 5f 70 74 72 20 64 73 74 2c 20 6d 70 66 72  fr_ptr dst, mpfr
0720: 5f 73 72 63 70 74 72 20 73 72 63 31 2c 20 6d 70  _srcptr src1, mp
0730: 66 72 5f 73 72 63 70 74 72 20 73 72 63 32 29 0a  fr_srcptr src2).
0740: 7b 0a 20 20 6d 70 66 72 5f 61 67 6d 20 28 64 73  {.  mpfr_agm (ds
0750: 74 2c 20 73 72 63 31 2c 20 73 72 63 32 2c 20 52  t, src1, src2, R
0760: 4f 55 4e 44 29 3b 0a 7d 0a 0a 73 74 61 74 69 63  OUND);.}..static
0770: 20 76 6f 69 64 0a 65 5f 6d 70 66 72 5f 61 73 69   void.e_mpfr_asi
0780: 6e 20 28 6d 70 66 72 5f 70 74 72 20 64 73 74 2c  n (mpfr_ptr dst,
0790: 20 6d 70 66 72 5f 73 72 63 70 74 72 20 73 72 63   mpfr_srcptr src
07a0: 29 0a 7b 0a 20 20 6d 70 66 72 5f 61 73 69 6e 20  ).{.  mpfr_asin 
07b0: 28 64 73 74 2c 20 73 72 63 2c 20 52 4f 55 4e 44  (dst, src, ROUND
07c0: 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69  );.}..static voi
07d0: 64 0a 65 5f 6d 70 66 72 5f 61 74 61 6e 20 28 6d  d.e_mpfr_atan (m
07e0: 70 66 72 5f 70 74 72 20 64 73 74 2c 20 6d 70 66  pfr_ptr dst, mpf
07f0: 72 5f 73 72 63 70 74 72 20 73 72 63 29 0a 7b 0a  r_srcptr src).{.
0800: 20 20 6d 70 66 72 5f 61 74 61 6e 20 28 64 73 74    mpfr_atan (dst
0810: 2c 20 73 72 63 2c 20 52 4f 55 4e 44 29 3b 0a 7d  , src, ROUND);.}
0820: 0a 0a 2f 2a 20 62 65 63 61 75 73 65 20 6d 70 66  ../* because mpf
0830: 72 5f 63 6d 70 20 69 73 20 61 20 6d 61 63 72 6f  r_cmp is a macro
0840: 20 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 0a 65   */.static int.e
0850: 5f 6d 70 66 72 5f 63 6d 70 20 28 6d 70 66 72 5f  _mpfr_cmp (mpfr_
0860: 73 72 63 70 74 72 20 78 2c 20 6d 70 66 72 5f 73  srcptr x, mpfr_s
0870: 72 63 70 74 72 20 79 29 0a 7b 0a 20 20 72 65 74  rcptr y).{.  ret
0880: 75 72 6e 20 6d 70 66 72 5f 63 6d 70 20 28 78 2c  urn mpfr_cmp (x,
0890: 20 79 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 76   y);.}..static v
08a0: 6f 69 64 0a 65 5f 6d 70 66 72 5f 64 69 6d 20 28  oid.e_mpfr_dim (
08b0: 6d 70 66 72 5f 70 74 72 20 64 73 74 2c 20 6d 70  mpfr_ptr dst, mp
08c0: 66 72 5f 73 72 63 70 74 72 20 73 72 63 31 2c 20  fr_srcptr src1, 
08d0: 6d 70 66 72 5f 73 72 63 70 74 72 20 73 72 63 32  mpfr_srcptr src2
08e0: 29 0a 7b 0a 20 20 6d 70 66 72 5f 64 69 6d 20 28  ).{.  mpfr_dim (
08f0: 64 73 74 2c 20 73 72 63 31 2c 20 73 72 63 32 2c  dst, src1, src2,
0900: 20 52 4f 55 4e 44 29 3b 0a 7d 0a 0a 73 74 61 74   ROUND);.}..stat
0910: 69 63 20 76 6f 69 64 0a 65 5f 6d 70 66 72 5f 63  ic void.e_mpfr_c
0920: 6f 6e 73 74 5f 65 75 6c 65 72 20 28 6d 70 66 72  onst_euler (mpfr
0930: 5f 70 74 72 20 64 73 74 29 0a 7b 0a 20 20 6d 70  _ptr dst).{.  mp
0940: 66 72 5f 63 6f 6e 73 74 5f 65 75 6c 65 72 20 28  fr_const_euler (
0950: 64 73 74 2c 20 52 4f 55 4e 44 29 3b 0a 7d 0a 0a  dst, ROUND);.}..
0960: 73 74 61 74 69 63 20 76 6f 69 64 0a 65 5f 6d 70  static void.e_mp
0970: 66 72 5f 66 61 63 5f 75 69 20 28 6d 70 66 72 5f  fr_fac_ui (mpfr_
0980: 70 74 72 20 64 73 74 2c 20 75 6e 73 69 67 6e 65  ptr dst, unsigne
0990: 64 20 6c 6f 6e 67 20 6e 29 0a 7b 0a 20 20 6d 70  d long n).{.  mp
09a0: 66 72 5f 66 61 63 5f 75 69 20 28 64 73 74 2c 20  fr_fac_ui (dst, 
09b0: 6e 2c 20 52 4f 55 4e 44 29 3b 0a 7d 0a 0a 73 74  n, ROUND);.}..st
09c0: 61 74 69 63 20 76 6f 69 64 0a 65 5f 6d 70 66 72  atic void.e_mpfr
09d0: 5f 63 6f 6e 73 74 5f 6c 6f 67 32 20 28 6d 70 66  _const_log2 (mpf
09e0: 72 5f 70 74 72 20 64 73 74 29 0a 7b 0a 20 20 6d  r_ptr dst).{.  m
09f0: 70 66 72 5f 63 6f 6e 73 74 5f 6c 6f 67 32 20 28  pfr_const_log2 (
0a00: 64 73 74 2c 20 52 4f 55 4e 44 29 3b 0a 7d 0a 0a  dst, ROUND);.}..
0a10: 73 74 61 74 69 63 20 76 6f 69 64 0a 65 5f 6d 70  static void.e_mp
0a20: 66 72 5f 63 6f 6e 73 74 5f 70 69 20 28 6d 70 66  fr_const_pi (mpf
0a30: 72 5f 70 74 72 20 64 73 74 29 0a 7b 0a 20 20 6d  r_ptr dst).{.  m
0a40: 70 66 72 5f 63 6f 6e 73 74 5f 70 69 20 28 64 73  pfr_const_pi (ds
0a50: 74 2c 20 52 4f 55 4e 44 29 3b 0a 7d 0a 0a 73 74  t, ROUND);.}..st
0a60: 61 74 69 63 20 76 6f 69 64 0a 65 5f 6d 70 66 72  atic void.e_mpfr
0a70: 5f 63 6f 73 20 28 6d 70 66 72 5f 70 74 72 20 64  _cos (mpfr_ptr d
0a80: 73 74 2c 20 6d 70 66 72 5f 73 72 63 70 74 72 20  st, mpfr_srcptr 
0a90: 73 72 63 29 0a 7b 0a 20 20 6d 70 66 72 5f 63 6f  src).{.  mpfr_co
0aa0: 73 20 28 64 73 74 2c 20 73 72 63 2c 20 52 4f 55  s (dst, src, ROU
0ab0: 4e 44 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 76  ND);.}..static v
0ac0: 6f 69 64 0a 65 5f 6d 70 66 72 5f 63 6f 73 68 20  oid.e_mpfr_cosh 
0ad0: 28 6d 70 66 72 5f 70 74 72 20 64 73 74 2c 20 6d  (mpfr_ptr dst, m
0ae0: 70 66 72 5f 73 72 63 70 74 72 20 73 72 63 29 0a  pfr_srcptr src).
0af0: 7b 0a 20 20 6d 70 66 72 5f 63 6f 73 68 20 28 64  {.  mpfr_cosh (d
0b00: 73 74 2c 20 73 72 63 2c 20 52 4f 55 4e 44 29 3b  st, src, ROUND);
0b10: 0a 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 0a  .}..static void.
0b20: 65 5f 6d 70 66 72 5f 64 69 76 20 28 6d 70 66 72  e_mpfr_div (mpfr
0b30: 5f 70 74 72 20 64 73 74 2c 20 6d 70 66 72 5f 73  _ptr dst, mpfr_s
0b40: 72 63 70 74 72 20 73 72 63 31 2c 20 6d 70 66 72  rcptr src1, mpfr
0b50: 5f 73 72 63 70 74 72 20 73 72 63 32 29 0a 7b 0a  _srcptr src2).{.
0b60: 20 20 6d 70 66 72 5f 64 69 76 20 28 64 73 74 2c    mpfr_div (dst,
0b70: 20 73 72 63 31 2c 20 73 72 63 32 2c 20 52 4f 55   src1, src2, ROU
0b80: 4e 44 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 76  ND);.}..static v
0b90: 6f 69 64 0a 65 5f 6d 70 66 72 5f 64 69 76 5f 32  oid.e_mpfr_div_2
0ba0: 65 78 70 20 28 6d 70 66 72 5f 70 74 72 20 64 73  exp (mpfr_ptr ds
0bb0: 74 2c 20 6d 70 66 72 5f 73 72 63 70 74 72 20 73  t, mpfr_srcptr s
0bc0: 72 63 2c 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e  rc, unsigned lon
0bd0: 67 20 6e 29 0a 7b 0a 20 20 6d 70 66 72 5f 64 69  g n).{.  mpfr_di
0be0: 76 5f 32 65 78 70 20 28 64 73 74 2c 20 73 72 63  v_2exp (dst, src
0bf0: 2c 20 6e 2c 20 52 4f 55 4e 44 29 3b 0a 7d 0a 0a  , n, ROUND);.}..
0c00: 73 74 61 74 69 63 20 76 6f 69 64 0a 65 5f 6d 70  static void.e_mp
0c10: 66 72 5f 65 78 70 20 28 6d 70 66 72 5f 70 74 72  fr_exp (mpfr_ptr
0c20: 20 64 73 74 2c 20 6d 70 66 72 5f 73 72 63 70 74   dst, mpfr_srcpt
0c30: 72 20 73 72 63 29 0a 7b 0a 20 20 6d 70 66 72 5f  r src).{.  mpfr_
0c40: 65 78 70 20 28 64 73 74 2c 20 73 72 63 2c 20 52  exp (dst, src, R
0c50: 4f 55 4e 44 29 3b 0a 7d 0a 0a 73 74 61 74 69 63  OUND);.}..static
0c60: 20 76 6f 69 64 0a 65 5f 6d 70 66 72 5f 65 78 70   void.e_mpfr_exp
0c70: 6d 31 20 28 6d 70 66 72 5f 70 74 72 20 64 73 74  m1 (mpfr_ptr dst
0c80: 2c 20 6d 70 66 72 5f 73 72 63 70 74 72 20 73 72  , mpfr_srcptr sr
0c90: 63 29 0a 7b 0a 20 20 6d 70 66 72 5f 65 78 70 6d  c).{.  mpfr_expm
0ca0: 31 20 28 64 73 74 2c 20 73 72 63 2c 20 52 4f 55  1 (dst, src, ROU
0cb0: 4e 44 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 76  ND);.}..static v
0cc0: 6f 69 64 0a 65 5f 6d 70 66 72 5f 66 6d 61 20 28  oid.e_mpfr_fma (
0cd0: 6d 70 66 72 5f 70 74 72 20 77 2c 20 6d 70 66 72  mpfr_ptr w, mpfr
0ce0: 5f 73 72 63 70 74 72 20 78 2c 20 6d 70 66 72 5f  _srcptr x, mpfr_
0cf0: 73 72 63 70 74 72 20 79 2c 20 6d 70 66 72 5f 73  srcptr y, mpfr_s
0d00: 72 63 70 74 72 20 7a 29 0a 7b 0a 20 20 6d 70 66  rcptr z).{.  mpf
0d10: 72 5f 66 6d 61 20 28 77 2c 20 78 2c 20 79 2c 20  r_fma (w, x, y, 
0d20: 7a 2c 20 52 4f 55 4e 44 29 3b 0a 7d 0a 0a 73 74  z, ROUND);.}..st
0d30: 61 74 69 63 20 76 6f 69 64 0a 65 5f 6d 70 66 72  atic void.e_mpfr
0d40: 5f 68 79 70 6f 74 20 28 6d 70 66 72 5f 70 74 72  _hypot (mpfr_ptr
0d50: 20 64 73 74 2c 20 6d 70 66 72 5f 73 72 63 70 74   dst, mpfr_srcpt
0d60: 72 20 73 72 63 31 2c 20 6d 70 66 72 5f 73 72 63  r src1, mpfr_src
0d70: 70 74 72 20 73 72 63 32 29 0a 7b 0a 20 20 6d 70  ptr src2).{.  mp
0d80: 66 72 5f 68 79 70 6f 74 20 28 64 73 74 2c 20 73  fr_hypot (dst, s
0d90: 72 63 31 2c 20 73 72 63 32 2c 20 52 4f 55 4e 44  rc1, src2, ROUND
0da0: 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69  );.}..static voi
0db0: 64 0a 65 5f 6d 70 66 72 5f 6c 6f 67 20 28 6d 70  d.e_mpfr_log (mp
0dc0: 66 72 5f 70 74 72 20 64 73 74 2c 20 6d 70 66 72  fr_ptr dst, mpfr
0dd0: 5f 73 72 63 70 74 72 20 73 72 63 29 0a 7b 0a 20  _srcptr src).{. 
0de0: 20 6d 70 66 72 5f 6c 6f 67 20 28 64 73 74 2c 20   mpfr_log (dst, 
0df0: 73 72 63 2c 20 52 4f 55 4e 44 29 3b 0a 7d 0a 0a  src, ROUND);.}..
0e00: 73 74 61 74 69 63 20 76 6f 69 64 0a 65 5f 6d 70  static void.e_mp
0e10: 66 72 5f 6c 6f 67 32 20 28 6d 70 66 72 5f 70 74  fr_log2 (mpfr_pt
0e20: 72 20 64 73 74 2c 20 6d 70 66 72 5f 73 72 63 70  r dst, mpfr_srcp
0e30: 74 72 20 73 72 63 29 0a 7b 0a 20 20 6d 70 66 72  tr src).{.  mpfr
0e40: 5f 6c 6f 67 32 20 28 64 73 74 2c 20 73 72 63 2c  _log2 (dst, src,
0e50: 20 52 4f 55 4e 44 29 3b 0a 7d 0a 0a 73 74 61 74   ROUND);.}..stat
0e60: 69 63 20 76 6f 69 64 0a 65 5f 6d 70 66 72 5f 6c  ic void.e_mpfr_l
0e70: 6f 67 31 30 20 28 6d 70 66 72 5f 70 74 72 20 64  og10 (mpfr_ptr d
0e80: 73 74 2c 20 6d 70 66 72 5f 73 72 63 70 74 72 20  st, mpfr_srcptr 
0e90: 73 72 63 29 0a 7b 0a 20 20 6d 70 66 72 5f 6c 6f  src).{.  mpfr_lo
0ea0: 67 31 30 20 28 64 73 74 2c 20 73 72 63 2c 20 52  g10 (dst, src, R
0eb0: 4f 55 4e 44 29 3b 0a 7d 0a 0a 73 74 61 74 69 63  OUND);.}..static
0ec0: 20 76 6f 69 64 0a 65 5f 6d 70 66 72 5f 6c 6f 67   void.e_mpfr_log
0ed0: 31 70 20 28 6d 70 66 72 5f 70 74 72 20 64 73 74  1p (mpfr_ptr dst
0ee0: 2c 20 6d 70 66 72 5f 73 72 63 70 74 72 20 73 72  , mpfr_srcptr sr
0ef0: 63 29 0a 7b 0a 20 20 6d 70 66 72 5f 6c 6f 67 31  c).{.  mpfr_log1
0f00: 70 20 28 64 73 74 2c 20 73 72 63 2c 20 52 4f 55  p (dst, src, ROU
0f10: 4e 44 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 76  ND);.}..static v
0f20: 6f 69 64 0a 65 5f 6d 70 66 72 5f 6d 75 6c 20 28  oid.e_mpfr_mul (
0f30: 6d 70 66 72 5f 70 74 72 20 64 73 74 2c 20 6d 70  mpfr_ptr dst, mp
0f40: 66 72 5f 73 72 63 70 74 72 20 73 72 63 31 2c 20  fr_srcptr src1, 
0f50: 6d 70 66 72 5f 73 72 63 70 74 72 20 73 72 63 32  mpfr_srcptr src2
0f60: 29 0a 7b 0a 20 20 6d 70 66 72 5f 6d 75 6c 20 28  ).{.  mpfr_mul (
0f70: 64 73 74 2c 20 73 72 63 31 2c 20 73 72 63 32 2c  dst, src1, src2,
0f80: 20 52 4f 55 4e 44 29 3b 0a 7d 0a 0a 73 74 61 74   ROUND);.}..stat
0f90: 69 63 20 76 6f 69 64 0a 65 5f 6d 70 66 72 5f 6d  ic void.e_mpfr_m
0fa0: 75 6c 5f 32 65 78 70 20 28 6d 70 66 72 5f 70 74  ul_2exp (mpfr_pt
0fb0: 72 20 64 73 74 2c 20 6d 70 66 72 5f 73 72 63 70  r dst, mpfr_srcp
0fc0: 74 72 20 73 72 63 2c 20 75 6e 73 69 67 6e 65 64  tr src, unsigned
0fd0: 20 6c 6f 6e 67 20 6e 29 0a 7b 0a 20 20 6d 70 66   long n).{.  mpf
0fe0: 72 5f 6d 75 6c 5f 32 65 78 70 20 28 64 73 74 2c  r_mul_2exp (dst,
0ff0: 20 73 72 63 2c 20 6e 2c 20 52 4f 55 4e 44 29 3b   src, n, ROUND);
1000: 0a 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 0a  .}..static void.
1010: 65 5f 6d 70 66 72 5f 6e 65 67 20 28 6d 70 66 72  e_mpfr_neg (mpfr
1020: 5f 70 74 72 20 64 73 74 2c 20 6d 70 66 72 5f 73  _ptr dst, mpfr_s
1030: 72 63 70 74 72 20 73 72 63 29 0a 7b 0a 20 20 6d  rcptr src).{.  m
1040: 70 66 72 5f 6e 65 67 20 28 64 73 74 2c 20 73 72  pfr_neg (dst, sr
1050: 63 2c 20 52 4f 55 4e 44 29 3b 0a 7d 0a 0a 73 74  c, ROUND);.}..st
1060: 61 74 69 63 20 76 6f 69 64 0a 65 5f 6d 70 66 72  atic void.e_mpfr
1070: 5f 70 6f 77 5f 75 69 20 28 6d 70 66 72 5f 70 74  _pow_ui (mpfr_pt
1080: 72 20 70 2c 20 6d 70 66 72 5f 73 72 63 70 74 72  r p, mpfr_srcptr
1090: 20 62 2c 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e   b, unsigned lon
10a0: 67 20 65 29 0a 7b 0a 20 20 6d 70 66 72 5f 70 6f  g e).{.  mpfr_po
10b0: 77 5f 75 69 20 28 70 2c 20 62 2c 20 65 2c 20 52  w_ui (p, b, e, R
10c0: 4f 55 4e 44 29 3b 0a 7d 0a 0a 73 74 61 74 69 63  OUND);.}..static
10d0: 20 76 6f 69 64 0a 65 5f 6d 70 66 72 5f 72 65 6c   void.e_mpfr_rel
10e0: 64 69 66 66 20 28 6d 70 66 72 5f 70 74 72 20 64  diff (mpfr_ptr d
10f0: 73 74 2c 20 6d 70 66 72 5f 73 72 63 70 74 72 20  st, mpfr_srcptr 
1100: 73 72 63 31 2c 20 6d 70 66 72 5f 73 72 63 70 74  src1, mpfr_srcpt
1110: 72 20 73 72 63 32 29 0a 7b 0a 20 20 6d 70 66 72  r src2).{.  mpfr
1120: 5f 72 65 6c 64 69 66 66 20 28 64 73 74 2c 20 73  _reldiff (dst, s
1130: 72 63 31 2c 20 73 72 63 32 2c 20 52 4f 55 4e 44  rc1, src2, ROUND
1140: 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69  );.}..static voi
1150: 64 0a 65 5f 6d 70 66 72 5f 73 65 74 5f 70 6f 73  d.e_mpfr_set_pos
1160: 69 6e 66 20 28 6d 70 66 72 5f 70 74 72 20 64 73  inf (mpfr_ptr ds
1170: 74 29 0a 7b 0a 20 20 6d 70 66 72 5f 73 65 74 5f  t).{.  mpfr_set_
1180: 69 6e 66 20 28 64 73 74 2c 20 31 29 3b 0a 7d 0a  inf (dst, 1);.}.
1190: 0a 73 74 61 74 69 63 20 76 6f 69 64 0a 65 5f 6d  .static void.e_m
11a0: 70 66 72 5f 73 69 6e 20 28 6d 70 66 72 5f 70 74  pfr_sin (mpfr_pt
11b0: 72 20 64 73 74 2c 20 6d 70 66 72 5f 73 72 63 70  r dst, mpfr_srcp
11c0: 74 72 20 73 72 63 29 0a 7b 0a 20 20 6d 70 66 72  tr src).{.  mpfr
11d0: 5f 73 69 6e 20 28 64 73 74 2c 20 73 72 63 2c 20  _sin (dst, src, 
11e0: 52 4f 55 4e 44 29 3b 0a 7d 0a 0a 73 74 61 74 69  ROUND);.}..stati
11f0: 63 20 76 6f 69 64 0a 65 5f 6d 70 66 72 5f 73 69  c void.e_mpfr_si
1200: 6e 68 20 28 6d 70 66 72 5f 70 74 72 20 64 73 74  nh (mpfr_ptr dst
1210: 2c 20 6d 70 66 72 5f 73 72 63 70 74 72 20 73 72  , mpfr_srcptr sr
1220: 63 29 0a 7b 0a 20 20 6d 70 66 72 5f 73 69 6e 68  c).{.  mpfr_sinh
1230: 20 28 64 73 74 2c 20 73 72 63 2c 20 52 4f 55 4e   (dst, src, ROUN
1240: 44 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e  D);.}..static in
1250: 74 0a 65 5f 6d 70 66 72 5f 73 67 6e 20 28 6d 70  t.e_mpfr_sgn (mp
1260: 66 72 5f 73 72 63 70 74 72 20 78 29 0a 7b 0a 20  fr_srcptr x).{. 
1270: 20 72 65 74 75 72 6e 20 6d 70 66 72 5f 73 67 6e   return mpfr_sgn
1280: 20 28 78 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20   (x);.}..static 
1290: 76 6f 69 64 0a 65 5f 6d 70 66 72 5f 73 71 72 74  void.e_mpfr_sqrt
12a0: 20 28 6d 70 66 72 5f 70 74 72 20 64 73 74 2c 20   (mpfr_ptr dst, 
12b0: 6d 70 66 72 5f 73 72 63 70 74 72 20 73 72 63 29  mpfr_srcptr src)
12c0: 0a 7b 0a 20 20 6d 70 66 72 5f 73 71 72 74 20 28  .{.  mpfr_sqrt (
12d0: 64 73 74 2c 20 73 72 63 2c 20 52 4f 55 4e 44 29  dst, src, ROUND)
12e0: 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69 64  ;.}..static void
12f0: 0a 65 5f 6d 70 66 72 5f 73 75 62 20 28 6d 70 66  .e_mpfr_sub (mpf
1300: 72 5f 70 74 72 20 64 73 74 2c 20 6d 70 66 72 5f  r_ptr dst, mpfr_
1310: 73 72 63 70 74 72 20 73 72 63 31 2c 20 6d 70 66  srcptr src1, mpf
1320: 72 5f 73 72 63 70 74 72 20 73 72 63 32 29 0a 7b  r_srcptr src2).{
1330: 0a 20 20 6d 70 66 72 5f 73 75 62 20 28 64 73 74  .  mpfr_sub (dst
1340: 2c 20 73 72 63 31 2c 20 73 72 63 32 2c 20 52 4f  , src1, src2, RO
1350: 55 4e 44 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20  UND);.}..static 
1360: 76 6f 69 64 0a 65 5f 6d 70 66 72 5f 74 61 6e 20  void.e_mpfr_tan 
1370: 28 6d 70 66 72 5f 70 74 72 20 64 73 74 2c 20 6d  (mpfr_ptr dst, m
1380: 70 66 72 5f 73 72 63 70 74 72 20 73 72 63 29 0a  pfr_srcptr src).
1390: 7b 0a 20 20 6d 70 66 72 5f 74 61 6e 20 28 64 73  {.  mpfr_tan (ds
13a0: 74 2c 20 73 72 63 2c 20 52 4f 55 4e 44 29 3b 0a  t, src, ROUND);.
13b0: 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 0a 65  }..static void.e
13c0: 5f 6d 70 66 72 5f 74 61 6e 68 20 28 6d 70 66 72  _mpfr_tanh (mpfr
13d0: 5f 70 74 72 20 64 73 74 2c 20 6d 70 66 72 5f 73  _ptr dst, mpfr_s
13e0: 72 63 70 74 72 20 73 72 63 29 0a 7b 0a 20 20 6d  rcptr src).{.  m
13f0: 70 66 72 5f 74 61 6e 68 20 28 64 73 74 2c 20 73  pfr_tanh (dst, s
1400: 72 63 2c 20 52 4f 55 4e 44 29 3b 0a 7d 0a 0a 0a  rc, ROUND);.}...
1410: 73 74 61 74 69 63 20 5f 5f 67 6d 70 5f 63 6f 6e  static __gmp_con
1420: 73 74 20 73 74 72 75 63 74 20 6d 70 65 78 70 72  st struct mpexpr
1430: 5f 6f 70 65 72 61 74 6f 72 5f 74 20 20 5f 6d 70  _operator_t  _mp
1440: 66 72 5f 65 78 70 72 5f 73 74 61 6e 64 61 72 64  fr_expr_standard
1450: 5f 74 61 62 6c 65 5b 5d 20 3d 20 7b 0a 0a 20 20  _table[] = {..  
1460: 7b 20 22 2a 2a 22 2c 20 20 28 6d 70 65 78 70 72  { "**",  (mpexpr
1470: 5f 66 75 6e 5f 74 29 20 65 5f 6d 70 66 72 5f 70  _fun_t) e_mpfr_p
1480: 6f 77 5f 75 69 2c 0a 20 20 20 20 4d 50 45 58 50  ow_ui,.    MPEXP
1490: 52 5f 54 59 50 45 5f 42 49 4e 41 52 59 5f 55 49  R_TYPE_BINARY_UI
14a0: 20 7c 20 4d 50 45 58 50 52 5f 54 59 50 45 5f 52   | MPEXPR_TYPE_R
14b0: 49 47 48 54 41 53 53 4f 43 2c 20 20 20 20 20 20  IGHTASSOC,      
14c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 32 32 30               220
14d0: 20 7d 2c 0a 20 20 0a 20 20 7b 20 22 21 22 2c 20   },.  .  { "!", 
14e0: 20 20 28 6d 70 65 78 70 72 5f 66 75 6e 5f 74 29    (mpexpr_fun_t)
14f0: 20 65 5f 6d 70 66 72 5f 73 67 6e 2c 0a 20 20 20   e_mpfr_sgn,.   
1500: 20 4d 50 45 58 50 52 5f 54 59 50 45 5f 4c 4f 47   MPEXPR_TYPE_LOG
1510: 49 43 41 4c 5f 4e 4f 54 20 7c 20 4d 50 45 58 50  ICAL_NOT | MPEXP
1520: 52 5f 54 59 50 45 5f 50 52 45 46 49 58 2c 20 20  R_TYPE_PREFIX,  
1530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1540: 20 20 20 32 31 30 20 7d 2c 0a 20 20 7b 20 22 2d     210 },.  { "-
1550: 22 2c 20 20 20 28 6d 70 65 78 70 72 5f 66 75 6e  ",   (mpexpr_fun
1560: 5f 74 29 20 65 5f 6d 70 66 72 5f 6e 65 67 2c 0a  _t) e_mpfr_neg,.
1570: 20 20 20 20 4d 50 45 58 50 52 5f 54 59 50 45 5f      MPEXPR_TYPE_
1580: 55 4e 41 52 59 20 7c 20 4d 50 45 58 50 52 5f 54  UNARY | MPEXPR_T
1590: 59 50 45 5f 50 52 45 46 49 58 2c 20 20 20 20 20  YPE_PREFIX,     
15a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b0: 20 20 20 20 20 20 32 31 30 20 7d 2c 0a 0a 20 20        210 },..  
15c0: 7b 20 22 2a 22 2c 20 20 20 28 6d 70 65 78 70 72  { "*",   (mpexpr
15d0: 5f 66 75 6e 5f 74 29 20 65 5f 6d 70 66 72 5f 6d  _fun_t) e_mpfr_m
15e0: 75 6c 2c 20 20 20 20 20 20 20 20 4d 50 45 58 50  ul,        MPEXP
15f0: 52 5f 54 59 50 45 5f 42 49 4e 41 52 59 2c 20 20  R_TYPE_BINARY,  
1600: 20 20 20 20 32 30 30 20 7d 2c 0a 20 20 7b 20 22      200 },.  { "
1610: 2f 22 2c 20 20 20 28 6d 70 65 78 70 72 5f 66 75  /",   (mpexpr_fu
1620: 6e 5f 74 29 20 65 5f 6d 70 66 72 5f 64 69 76 2c  n_t) e_mpfr_div,
1630: 20 20 20 20 20 20 20 20 4d 50 45 58 50 52 5f 54          MPEXPR_T
1640: 59 50 45 5f 42 49 4e 41 52 59 2c 20 20 20 20 20  YPE_BINARY,     
1650: 20 32 30 30 20 7d 2c 0a 0a 20 20 7b 20 22 2b 22   200 },..  { "+"
1660: 2c 20 20 20 28 6d 70 65 78 70 72 5f 66 75 6e 5f  ,   (mpexpr_fun_
1670: 74 29 20 65 5f 6d 70 66 72 5f 61 64 64 2c 20 20  t) e_mpfr_add,  
1680: 20 20 20 20 20 20 4d 50 45 58 50 52 5f 54 59 50        MPEXPR_TYP
1690: 45 5f 42 49 4e 41 52 59 2c 20 20 20 20 20 20 31  E_BINARY,      1
16a0: 39 30 20 7d 2c 0a 20 20 7b 20 22 2d 22 2c 20 20  90 },.  { "-",  
16b0: 20 28 6d 70 65 78 70 72 5f 66 75 6e 5f 74 29 20   (mpexpr_fun_t) 
16c0: 65 5f 6d 70 66 72 5f 73 75 62 2c 20 20 20 20 20  e_mpfr_sub,     
16d0: 20 20 20 4d 50 45 58 50 52 5f 54 59 50 45 5f 42     MPEXPR_TYPE_B
16e0: 49 4e 41 52 59 2c 20 20 20 20 20 20 31 39 30 20  INARY,      190 
16f0: 7d 2c 0a 0a 20 20 7b 20 22 3c 3c 22 2c 20 20 28  },..  { "<<",  (
1700: 6d 70 65 78 70 72 5f 66 75 6e 5f 74 29 20 65 5f  mpexpr_fun_t) e_
1710: 6d 70 66 72 5f 6d 75 6c 5f 32 65 78 70 2c 20 20  mpfr_mul_2exp,  
1720: 20 4d 50 45 58 50 52 5f 54 59 50 45 5f 42 49 4e   MPEXPR_TYPE_BIN
1730: 41 52 59 5f 55 49 2c 20 20 20 31 38 30 20 7d 2c  ARY_UI,   180 },
1740: 0a 20 20 7b 20 22 3e 3e 22 2c 20 20 28 6d 70 65  .  { ">>",  (mpe
1750: 78 70 72 5f 66 75 6e 5f 74 29 20 65 5f 6d 70 66  xpr_fun_t) e_mpf
1760: 72 5f 64 69 76 5f 32 65 78 70 2c 20 20 20 4d 50  r_div_2exp,   MP
1770: 45 58 50 52 5f 54 59 50 45 5f 42 49 4e 41 52 59  EXPR_TYPE_BINARY
1780: 5f 55 49 2c 20 20 20 31 38 30 20 7d 2c 0a 0a 20  _UI,   180 },.. 
1790: 20 7b 20 22 3c 3d 22 2c 20 20 28 6d 70 65 78 70   { "<=",  (mpexp
17a0: 72 5f 66 75 6e 5f 74 29 20 65 5f 6d 70 66 72 5f  r_fun_t) e_mpfr_
17b0: 63 6d 70 2c 20 20 20 20 20 20 20 20 4d 50 45 58  cmp,        MPEX
17c0: 50 52 5f 54 59 50 45 5f 43 4d 50 5f 4c 45 2c 20  PR_TYPE_CMP_LE, 
17d0: 20 20 20 20 20 31 37 30 20 7d 2c 0a 20 20 7b 20       170 },.  { 
17e0: 22 3c 22 2c 20 20 20 28 6d 70 65 78 70 72 5f 66  "<",   (mpexpr_f
17f0: 75 6e 5f 74 29 20 65 5f 6d 70 66 72 5f 63 6d 70  un_t) e_mpfr_cmp
1800: 2c 20 20 20 20 20 20 20 20 4d 50 45 58 50 52 5f  ,        MPEXPR_
1810: 54 59 50 45 5f 43 4d 50 5f 4c 54 2c 20 20 20 20  TYPE_CMP_LT,    
1820: 20 20 31 37 30 20 7d 2c 0a 20 20 7b 20 22 3e 3d    170 },.  { ">=
1830: 22 2c 20 20 28 6d 70 65 78 70 72 5f 66 75 6e 5f  ",  (mpexpr_fun_
1840: 74 29 20 65 5f 6d 70 66 72 5f 63 6d 70 2c 20 20  t) e_mpfr_cmp,  
1850: 20 20 20 20 20 20 4d 50 45 58 50 52 5f 54 59 50        MPEXPR_TYP
1860: 45 5f 43 4d 50 5f 47 45 2c 20 20 20 20 20 20 31  E_CMP_GE,      1
1870: 37 30 20 7d 2c 0a 20 20 7b 20 22 3e 22 2c 20 20  70 },.  { ">",  
1880: 20 28 6d 70 65 78 70 72 5f 66 75 6e 5f 74 29 20   (mpexpr_fun_t) 
1890: 65 5f 6d 70 66 72 5f 63 6d 70 2c 20 20 20 20 20  e_mpfr_cmp,     
18a0: 20 20 20 4d 50 45 58 50 52 5f 54 59 50 45 5f 43     MPEXPR_TYPE_C
18b0: 4d 50 5f 47 54 2c 20 20 20 20 20 20 31 37 30 20  MP_GT,      170 
18c0: 7d 2c 0a 0a 20 20 7b 20 22 3d 3d 22 2c 20 20 28  },..  { "==",  (
18d0: 6d 70 65 78 70 72 5f 66 75 6e 5f 74 29 20 65 5f  mpexpr_fun_t) e_
18e0: 6d 70 66 72 5f 63 6d 70 2c 20 20 20 20 20 20 20  mpfr_cmp,       
18f0: 20 4d 50 45 58 50 52 5f 54 59 50 45 5f 43 4d 50   MPEXPR_TYPE_CMP
1900: 5f 45 51 2c 20 20 20 20 20 20 31 36 30 20 7d 2c  _EQ,      160 },
1910: 0a 20 20 7b 20 22 21 3d 22 2c 20 20 28 6d 70 65  .  { "!=",  (mpe
1920: 78 70 72 5f 66 75 6e 5f 74 29 20 65 5f 6d 70 66  xpr_fun_t) e_mpf
1930: 72 5f 63 6d 70 2c 20 20 20 20 20 20 20 20 4d 50  r_cmp,        MP
1940: 45 58 50 52 5f 54 59 50 45 5f 43 4d 50 5f 4e 45  EXPR_TYPE_CMP_NE
1950: 2c 20 20 20 20 20 20 31 36 30 20 7d 2c 0a 0a 20  ,      160 },.. 
1960: 20 7b 20 22 26 26 22 2c 20 20 28 6d 70 65 78 70   { "&&",  (mpexp
1970: 72 5f 66 75 6e 5f 74 29 20 65 5f 6d 70 66 72 5f  r_fun_t) e_mpfr_
1980: 73 67 6e 2c 20 20 20 20 20 20 20 20 4d 50 45 58  sgn,        MPEX
1990: 50 52 5f 54 59 50 45 5f 4c 4f 47 49 43 41 4c 5f  PR_TYPE_LOGICAL_
19a0: 41 4e 44 2c 20 31 32 30 20 7d 2c 0a 20 20 7b 20  AND, 120 },.  { 
19b0: 22 7c 7c 22 2c 20 20 28 6d 70 65 78 70 72 5f 66  "||",  (mpexpr_f
19c0: 75 6e 5f 74 29 20 65 5f 6d 70 66 72 5f 73 67 6e  un_t) e_mpfr_sgn
19d0: 2c 20 20 20 20 20 20 20 20 4d 50 45 58 50 52 5f  ,        MPEXPR_
19e0: 54 59 50 45 5f 4c 4f 47 49 43 41 4c 5f 4f 52 2c  TYPE_LOGICAL_OR,
19f0: 20 20 31 31 30 20 7d 2c 0a 0a 20 20 7b 20 22 3a    110 },..  { ":
1a00: 22 2c 20 20 20 4e 55 4c 4c 2c 20 20 20 20 20 20  ",   NULL,      
1a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a20: 20 20 20 20 20 20 20 4d 50 45 58 50 52 5f 54 59         MPEXPR_TY
1a30: 50 45 5f 43 4f 4c 4f 4e 2c 20 20 20 20 20 20 20  PE_COLON,       
1a40: 31 30 31 20 7d 2c 0a 20 20 7b 20 22 3f 22 2c 20  101 },.  { "?", 
1a50: 20 20 28 6d 70 65 78 70 72 5f 66 75 6e 5f 74 29    (mpexpr_fun_t)
1a60: 20 65 5f 6d 70 66 72 5f 73 67 6e 2c 20 20 20 20   e_mpfr_sgn,    
1a70: 20 20 20 20 4d 50 45 58 50 52 5f 54 59 50 45 5f      MPEXPR_TYPE_
1a80: 51 55 45 53 54 49 4f 4e 2c 20 20 20 20 31 30 30  QUESTION,    100
1a90: 20 7d 2c 0a 0a 20 20 7b 20 22 29 22 2c 20 20 20   },..  { ")",   
1aa0: 4e 55 4c 4c 2c 20 20 20 20 20 20 20 20 20 20 20  NULL,           
1ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac0: 20 20 4d 50 45 58 50 52 5f 54 59 50 45 5f 43 4c    MPEXPR_TYPE_CL
1ad0: 4f 53 45 50 41 52 45 4e 2c 20 20 20 20 34 20 7d  OSEPAREN,    4 }
1ae0: 2c 0a 20 20 7b 20 22 28 22 2c 20 20 20 4e 55 4c  ,.  { "(",   NUL
1af0: 4c 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  L,              
1b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
1b10: 50 45 58 50 52 5f 54 59 50 45 5f 4f 50 45 4e 50  PEXPR_TYPE_OPENP
1b20: 41 52 45 4e 2c 20 20 20 20 20 33 20 7d 2c 0a 20  AREN,     3 },. 
1b30: 20 7b 20 22 2c 22 2c 20 20 20 4e 55 4c 4c 2c 20   { ",",   NULL, 
1b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b50: 20 20 20 20 20 20 20 20 20 20 20 20 4d 50 45 58              MPEX
1b60: 50 52 5f 54 59 50 45 5f 41 52 47 53 45 50 2c 20  PR_TYPE_ARGSEP, 
1b70: 20 20 20 20 20 20 20 32 20 7d 2c 0a 20 20 7b 20         2 },.  { 
1b80: 22 24 22 2c 20 20 20 4e 55 4c 4c 2c 20 20 20 20  "$",   NULL,    
1b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba0: 20 20 20 20 20 20 20 20 20 4d 50 45 58 50 52 5f           MPEXPR_
1bb0: 54 59 50 45 5f 56 41 52 49 41 42 4c 45 2c 20 20  TYPE_VARIABLE,  
1bc0: 20 20 20 20 31 20 7d 2c 0a 0a 20 20 7b 20 22 61      1 },..  { "a
1bd0: 62 73 22 2c 20 20 20 20 20 28 6d 70 65 78 70 72  bs",     (mpexpr
1be0: 5f 66 75 6e 5f 74 29 20 65 5f 6d 70 66 72 5f 61  _fun_t) e_mpfr_a
1bf0: 62 73 2c 20 20 20 20 20 4d 50 45 58 50 52 5f 54  bs,     MPEXPR_T
1c00: 59 50 45 5f 55 4e 41 52 59 20 20 20 20 20 20 20  YPE_UNARY       
1c10: 20 7d 2c 0a 20 20 7b 20 22 61 63 6f 73 22 2c 20   },.  { "acos", 
1c20: 20 20 20 28 6d 70 65 78 70 72 5f 66 75 6e 5f 74     (mpexpr_fun_t
1c30: 29 20 65 5f 6d 70 66 72 5f 61 63 6f 73 2c 20 20  ) e_mpfr_acos,  
1c40: 20 20 4d 50 45 58 50 52 5f 54 59 50 45 5f 55 4e    MPEXPR_TYPE_UN
1c50: 41 52 59 20 20 20 20 20 20 20 20 7d 2c 0a 20 20  ARY        },.  
1c60: 7b 20 22 61 67 6d 22 2c 20 20 20 20 20 28 6d 70  { "agm",     (mp
1c70: 65 78 70 72 5f 66 75 6e 5f 74 29 20 65 5f 6d 70  expr_fun_t) e_mp
1c80: 66 72 5f 61 67 6d 2c 20 20 20 20 20 4d 50 45 58  fr_agm,     MPEX
1c90: 50 52 5f 54 59 50 45 5f 42 49 4e 41 52 59 20 20  PR_TYPE_BINARY  
1ca0: 20 20 20 20 20 7d 2c 0a 20 20 7b 20 22 61 73 69       },.  { "asi
1cb0: 6e 22 2c 20 20 20 20 28 6d 70 65 78 70 72 5f 66  n",    (mpexpr_f
1cc0: 75 6e 5f 74 29 20 65 5f 6d 70 66 72 5f 61 73 69  un_t) e_mpfr_asi
1cd0: 6e 2c 20 20 20 20 4d 50 45 58 50 52 5f 54 59 50  n,    MPEXPR_TYP
1ce0: 45 5f 55 4e 41 52 59 20 20 20 20 20 20 20 20 7d  E_UNARY        }
1cf0: 2c 0a 20 20 7b 20 22 61 74 61 6e 22 2c 20 20 20  ,.  { "atan",   
1d00: 20 28 6d 70 65 78 70 72 5f 66 75 6e 5f 74 29 20   (mpexpr_fun_t) 
1d10: 65 5f 6d 70 66 72 5f 61 74 61 6e 2c 20 20 20 20  e_mpfr_atan,    
1d20: 4d 50 45 58 50 52 5f 54 59 50 45 5f 55 4e 41 52  MPEXPR_TYPE_UNAR
1d30: 59 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 7b 20  Y        },.  { 
1d40: 22 63 65 69 6c 22 2c 20 20 20 20 28 6d 70 65 78  "ceil",    (mpex
1d50: 70 72 5f 66 75 6e 5f 74 29 20 6d 70 66 72 5f 63  pr_fun_t) mpfr_c
1d60: 65 69 6c 2c 20 20 20 20 20 20 4d 50 45 58 50 52  eil,      MPEXPR
1d70: 5f 54 59 50 45 5f 55 4e 41 52 59 20 20 20 20 20  _TYPE_UNARY     
1d80: 20 20 20 7d 2c 0a 20 20 7b 20 22 63 6d 70 22 2c     },.  { "cmp",
1d90: 20 20 20 20 20 28 6d 70 65 78 70 72 5f 66 75 6e       (mpexpr_fun
1da0: 5f 74 29 20 65 5f 6d 70 66 72 5f 63 6d 70 2c 20  _t) e_mpfr_cmp, 
1db0: 20 20 20 20 4d 50 45 58 50 52 5f 54 59 50 45 5f      MPEXPR_TYPE_
1dc0: 49 5f 42 49 4e 41 52 59 20 20 20 20 20 7d 2c 0a  I_BINARY     },.
1dd0: 20 20 7b 20 22 63 6f 73 22 2c 20 20 20 20 20 28    { "cos",     (
1de0: 6d 70 65 78 70 72 5f 66 75 6e 5f 74 29 20 65 5f  mpexpr_fun_t) e_
1df0: 6d 70 66 72 5f 63 6f 73 2c 20 20 20 20 20 4d 50  mpfr_cos,     MP
1e00: 45 58 50 52 5f 54 59 50 45 5f 55 4e 41 52 59 20  EXPR_TYPE_UNARY 
1e10: 20 20 20 20 20 20 20 7d 2c 0a 20 20 7b 20 22 63         },.  { "c
1e20: 6f 73 68 22 2c 20 20 20 20 28 6d 70 65 78 70 72  osh",    (mpexpr
1e30: 5f 66 75 6e 5f 74 29 20 65 5f 6d 70 66 72 5f 63  _fun_t) e_mpfr_c
1e40: 6f 73 68 2c 20 20 20 20 4d 50 45 58 50 52 5f 54  osh,    MPEXPR_T
1e50: 59 50 45 5f 55 4e 41 52 59 20 20 20 20 20 20 20  YPE_UNARY       
1e60: 20 7d 2c 0a 20 20 7b 20 22 64 69 6d 22 2c 20 20   },.  { "dim",  
1e70: 20 20 20 28 6d 70 65 78 70 72 5f 66 75 6e 5f 74     (mpexpr_fun_t
1e80: 29 20 65 5f 6d 70 66 72 5f 64 69 6d 2c 20 20 20  ) e_mpfr_dim,   
1e90: 20 20 4d 50 45 58 50 52 5f 54 59 50 45 5f 42 49    MPEXPR_TYPE_BI
1ea0: 4e 41 52 59 20 20 20 20 20 20 20 7d 2c 0a 20 20  NARY       },.  
1eb0: 7b 20 22 65 71 22 2c 20 20 20 20 20 20 28 6d 70  { "eq",      (mp
1ec0: 65 78 70 72 5f 66 75 6e 5f 74 29 20 6d 70 66 72  expr_fun_t) mpfr
1ed0: 5f 65 71 2c 20 20 20 20 20 20 20 20 4d 50 45 58  _eq,        MPEX
1ee0: 50 52 5f 54 59 50 45 5f 49 5f 54 45 52 4e 41 52  PR_TYPE_I_TERNAR
1ef0: 59 5f 55 49 20 7d 2c 0a 20 20 7b 20 22 65 78 70  Y_UI },.  { "exp
1f00: 22 2c 20 20 20 20 20 28 6d 70 65 78 70 72 5f 66  ",     (mpexpr_f
1f10: 75 6e 5f 74 29 20 65 5f 6d 70 66 72 5f 65 78 70  un_t) e_mpfr_exp
1f20: 2c 20 20 20 20 20 4d 50 45 58 50 52 5f 54 59 50  ,     MPEXPR_TYP
1f30: 45 5f 55 4e 41 52 59 20 20 20 20 20 20 20 20 7d  E_UNARY        }
1f40: 2c 0a 20 20 7b 20 22 65 78 70 6d 31 22 2c 20 20  ,.  { "expm1",  
1f50: 20 28 6d 70 65 78 70 72 5f 66 75 6e 5f 74 29 20   (mpexpr_fun_t) 
1f60: 65 5f 6d 70 66 72 5f 65 78 70 6d 31 2c 20 20 20  e_mpfr_expm1,   
1f70: 4d 50 45 58 50 52 5f 54 59 50 45 5f 55 4e 41 52  MPEXPR_TYPE_UNAR
1f80: 59 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 7b 20  Y        },.  { 
1f90: 22 66 61 63 22 2c 20 20 20 20 20 28 6d 70 65 78  "fac",     (mpex
1fa0: 70 72 5f 66 75 6e 5f 74 29 20 65 5f 6d 70 66 72  pr_fun_t) e_mpfr
1fb0: 5f 66 61 63 5f 75 69 2c 20 20 4d 50 45 58 50 52  _fac_ui,  MPEXPR
1fc0: 5f 54 59 50 45 5f 55 4e 41 52 59 5f 55 49 20 20  _TYPE_UNARY_UI  
1fd0: 20 20 20 7d 2c 0a 20 20 7b 20 22 66 6c 6f 6f 72     },.  { "floor
1fe0: 22 2c 20 20 20 28 6d 70 65 78 70 72 5f 66 75 6e  ",   (mpexpr_fun
1ff0: 5f 74 29 20 6d 70 66 72 5f 66 6c 6f 6f 72 2c 20  _t) mpfr_floor, 
2000: 20 20 20 20 4d 50 45 58 50 52 5f 54 59 50 45 5f      MPEXPR_TYPE_
2010: 55 4e 41 52 59 20 20 20 20 20 20 20 20 7d 2c 0a  UNARY        },.
2020: 20 20 7b 20 22 66 6d 61 22 2c 20 20 20 20 20 28    { "fma",     (
2030: 6d 70 65 78 70 72 5f 66 75 6e 5f 74 29 20 65 5f  mpexpr_fun_t) e_
2040: 6d 70 66 72 5f 66 6d 61 2c 20 20 20 20 20 4d 50  mpfr_fma,     MP
2050: 45 58 50 52 5f 54 59 50 45 5f 54 45 52 4e 41 52  EXPR_TYPE_TERNAR
2060: 59 20 20 20 20 20 20 7d 2c 0a 20 20 7b 20 22 68  Y      },.  { "h
2070: 79 70 6f 74 22 2c 20 20 20 28 6d 70 65 78 70 72  ypot",   (mpexpr
2080: 5f 66 75 6e 5f 74 29 20 65 5f 6d 70 66 72 5f 68  _fun_t) e_mpfr_h
2090: 79 70 6f 74 2c 20 20 20 4d 50 45 58 50 52 5f 54  ypot,   MPEXPR_T
20a0: 59 50 45 5f 42 49 4e 41 52 59 20 20 20 20 20 20  YPE_BINARY      
20b0: 20 7d 2c 0a 20 20 7b 20 22 69 6e 66 5f 70 22 2c   },.  { "inf_p",
20c0: 20 20 20 28 6d 70 65 78 70 72 5f 66 75 6e 5f 74     (mpexpr_fun_t
20d0: 29 20 6d 70 66 72 5f 69 6e 66 5f 70 2c 20 20 20  ) mpfr_inf_p,   
20e0: 20 20 4d 50 45 58 50 52 5f 54 59 50 45 5f 49 5f    MPEXPR_TYPE_I_
20f0: 55 4e 41 52 59 20 20 20 20 20 20 7d 2c 0a 20 20  UNARY      },.  
2100: 7b 20 22 6c 6f 67 22 2c 20 20 20 20 20 28 6d 70  { "log",     (mp
2110: 65 78 70 72 5f 66 75 6e 5f 74 29 20 65 5f 6d 70  expr_fun_t) e_mp
2120: 66 72 5f 6c 6f 67 2c 20 20 20 20 20 4d 50 45 58  fr_log,     MPEX
2130: 50 52 5f 54 59 50 45 5f 55 4e 41 52 59 20 20 20  PR_TYPE_UNARY   
2140: 20 20 20 20 20 7d 2c 0a 20 20 7b 20 22 6c 6f 67       },.  { "log
2150: 32 22 2c 20 20 20 20 28 6d 70 65 78 70 72 5f 66  2",    (mpexpr_f
2160: 75 6e 5f 74 29 20 65 5f 6d 70 66 72 5f 6c 6f 67  un_t) e_mpfr_log
2170: 32 2c 20 20 20 20 4d 50 45 58 50 52 5f 54 59 50  2,    MPEXPR_TYP
2180: 45 5f 55 4e 41 52 59 20 20 20 20 20 20 20 20 7d  E_UNARY        }
2190: 2c 0a 20 20 7b 20 22 6c 6f 67 31 30 22 2c 20 20  ,.  { "log10",  
21a0: 20 28 6d 70 65 78 70 72 5f 66 75 6e 5f 74 29 20   (mpexpr_fun_t) 
21b0: 65 5f 6d 70 66 72 5f 6c 6f 67 31 30 2c 20 20 20  e_mpfr_log10,   
21c0: 4d 50 45 58 50 52 5f 54 59 50 45 5f 55 4e 41 52  MPEXPR_TYPE_UNAR
21d0: 59 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 7b 20  Y        },.  { 
21e0: 22 6c 6f 67 31 70 22 2c 20 20 20 28 6d 70 65 78  "log1p",   (mpex
21f0: 70 72 5f 66 75 6e 5f 74 29 20 65 5f 6d 70 66 72  pr_fun_t) e_mpfr
2200: 5f 6c 6f 67 31 70 2c 20 20 20 4d 50 45 58 50 52  _log1p,   MPEXPR
2210: 5f 54 59 50 45 5f 55 4e 41 52 59 20 20 20 20 20  _TYPE_UNARY     
2220: 20 20 20 7d 2c 0a 20 20 7b 20 22 6d 61 78 22 2c     },.  { "max",
2230: 20 20 20 20 20 28 6d 70 65 78 70 72 5f 66 75 6e       (mpexpr_fun
2240: 5f 74 29 20 65 5f 6d 70 66 72 5f 63 6d 70 2c 20  _t) e_mpfr_cmp, 
2250: 20 20 20 20 4d 50 45 58 50 52 5f 54 59 50 45 5f      MPEXPR_TYPE_
2260: 4d 41 58 0a 20 20 20 20 20 20 20 20 20 20 20 20  MAX.            
2270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2290: 20 20 7c 20 4d 50 45 58 50 52 5f 54 59 50 45 5f    | MPEXPR_TYPE_
22a0: 50 41 49 52 57 49 53 45 20 20 20 7d 2c 0a 20 20  PAIRWISE   },.  
22b0: 7b 20 22 6d 69 6e 22 2c 20 20 20 20 20 28 6d 70  { "min",     (mp
22c0: 65 78 70 72 5f 66 75 6e 5f 74 29 20 65 5f 6d 70  expr_fun_t) e_mp
22d0: 66 72 5f 63 6d 70 2c 20 20 20 20 20 4d 50 45 58  fr_cmp,     MPEX
22e0: 50 52 5f 54 59 50 45 5f 4d 49 4e 0a 20 20 20 20  PR_TYPE_MIN.    
22f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2310: 20 20 20 20 20 20 20 20 20 20 7c 20 4d 50 45 58            | MPEX
2320: 50 52 5f 54 59 50 45 5f 50 41 49 52 57 49 53 45  PR_TYPE_PAIRWISE
2330: 20 20 20 7d 2c 0a 20 20 7b 20 22 6e 61 6e 5f 70     },.  { "nan_p
2340: 22 2c 20 20 20 28 6d 70 65 78 70 72 5f 66 75 6e  ",   (mpexpr_fun
2350: 5f 74 29 20 6d 70 66 72 5f 6e 61 6e 5f 70 2c 20  _t) mpfr_nan_p, 
2360: 20 20 20 20 4d 50 45 58 50 52 5f 54 59 50 45 5f      MPEXPR_TYPE_
2370: 49 5f 55 4e 41 52 59 20 20 20 20 20 20 7d 2c 0a  I_UNARY      },.
2380: 20 20 7b 20 22 6e 75 6d 62 65 72 5f 70 22 2c 28    { "number_p",(
2390: 6d 70 65 78 70 72 5f 66 75 6e 5f 74 29 20 6d 70  mpexpr_fun_t) mp
23a0: 66 72 5f 6e 75 6d 62 65 72 5f 70 2c 20 20 4d 50  fr_number_p,  MP
23b0: 45 58 50 52 5f 54 59 50 45 5f 49 5f 55 4e 41 52  EXPR_TYPE_I_UNAR
23c0: 59 20 20 20 20 20 20 7d 2c 0a 20 20 7b 20 22 72  Y      },.  { "r
23d0: 65 6c 64 69 66 66 22 2c 20 28 6d 70 65 78 70 72  eldiff", (mpexpr
23e0: 5f 66 75 6e 5f 74 29 20 65 5f 6d 70 66 72 5f 72  _fun_t) e_mpfr_r
23f0: 65 6c 64 69 66 66 2c 20 4d 50 45 58 50 52 5f 54  eldiff, MPEXPR_T
2400: 59 50 45 5f 42 49 4e 41 52 59 20 20 20 20 20 20  YPE_BINARY      
2410: 20 7d 2c 0a 20 20 7b 20 22 72 6f 75 6e 64 22 2c   },.  { "round",
2420: 20 20 20 28 6d 70 65 78 70 72 5f 66 75 6e 5f 74     (mpexpr_fun_t
2430: 29 20 6d 70 66 72 5f 72 6f 75 6e 64 2c 20 20 20  ) mpfr_round,   
2440: 20 20 4d 50 45 58 50 52 5f 54 59 50 45 5f 55 4e    MPEXPR_TYPE_UN
2450: 41 52 59 20 20 20 20 20 20 20 20 7d 2c 0a 20 20  ARY        },.  
2460: 7b 20 22 73 67 6e 22 2c 20 20 20 20 20 28 6d 70  { "sgn",     (mp
2470: 65 78 70 72 5f 66 75 6e 5f 74 29 20 65 5f 6d 70  expr_fun_t) e_mp
2480: 66 72 5f 73 67 6e 2c 20 20 20 20 20 4d 50 45 58  fr_sgn,     MPEX
2490: 50 52 5f 54 59 50 45 5f 49 5f 55 4e 41 52 59 20  PR_TYPE_I_UNARY 
24a0: 20 20 20 20 20 7d 2c 0a 20 20 7b 20 22 73 69 6e       },.  { "sin
24b0: 22 2c 20 20 20 20 20 28 6d 70 65 78 70 72 5f 66  ",     (mpexpr_f
24c0: 75 6e 5f 74 29 20 65 5f 6d 70 66 72 5f 73 69 6e  un_t) e_mpfr_sin
24d0: 2c 20 20 20 20 20 4d 50 45 58 50 52 5f 54 59 50  ,     MPEXPR_TYP
24e0: 45 5f 55 4e 41 52 59 20 20 20 20 20 20 20 20 7d  E_UNARY        }
24f0: 2c 0a 20 20 7b 20 22 73 69 6e 68 22 2c 20 20 20  ,.  { "sinh",   
2500: 20 28 6d 70 65 78 70 72 5f 66 75 6e 5f 74 29 20   (mpexpr_fun_t) 
2510: 65 5f 6d 70 66 72 5f 73 69 6e 68 2c 20 20 20 20  e_mpfr_sinh,    
2520: 4d 50 45 58 50 52 5f 54 59 50 45 5f 55 4e 41 52  MPEXPR_TYPE_UNAR
2530: 59 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 7b 20  Y        },.  { 
2540: 22 73 71 72 74 22 2c 20 20 20 20 28 6d 70 65 78  "sqrt",    (mpex
2550: 70 72 5f 66 75 6e 5f 74 29 20 65 5f 6d 70 66 72  pr_fun_t) e_mpfr
2560: 5f 73 71 72 74 2c 20 20 20 20 4d 50 45 58 50 52  _sqrt,    MPEXPR
2570: 5f 54 59 50 45 5f 55 4e 41 52 59 20 20 20 20 20  _TYPE_UNARY     
2580: 20 20 20 7d 2c 0a 20 20 7b 20 22 74 61 6e 22 2c     },.  { "tan",
2590: 20 20 20 20 20 28 6d 70 65 78 70 72 5f 66 75 6e       (mpexpr_fun
25a0: 5f 74 29 20 65 5f 6d 70 66 72 5f 74 61 6e 2c 20  _t) e_mpfr_tan, 
25b0: 20 20 20 20 4d 50 45 58 50 52 5f 54 59 50 45 5f      MPEXPR_TYPE_
25c0: 55 4e 41 52 59 20 20 20 20 20 20 20 20 7d 2c 0a  UNARY        },.
25d0: 20 20 7b 20 22 74 61 6e 68 22 2c 20 20 20 20 28    { "tanh",    (
25e0: 6d 70 65 78 70 72 5f 66 75 6e 5f 74 29 20 65 5f  mpexpr_fun_t) e_
25f0: 6d 70 66 72 5f 74 61 6e 68 2c 20 20 20 20 4d 50  mpfr_tanh,    MP
2600: 45 58 50 52 5f 54 59 50 45 5f 55 4e 41 52 59 20  EXPR_TYPE_UNARY 
2610: 20 20 20 20 20 20 20 7d 2c 0a 20 20 7b 20 22 74         },.  { "t
2620: 72 75 6e 63 22 2c 20 20 20 28 6d 70 65 78 70 72  runc",   (mpexpr
2630: 5f 66 75 6e 5f 74 29 20 6d 70 66 72 5f 74 72 75  _fun_t) mpfr_tru
2640: 6e 63 2c 20 20 20 20 20 4d 50 45 58 50 52 5f 54  nc,     MPEXPR_T
2650: 59 50 45 5f 55 4e 41 52 59 20 20 20 20 20 20 20  YPE_UNARY       
2660: 20 7d 2c 0a 0a 20 20 7b 20 22 65 75 6c 65 72 22   },..  { "euler"
2670: 2c 20 20 20 28 6d 70 65 78 70 72 5f 66 75 6e 5f  ,   (mpexpr_fun_
2680: 74 29 20 65 5f 6d 70 66 72 5f 63 6f 6e 73 74 5f  t) e_mpfr_const_
2690: 65 75 6c 65 72 2c 20 4d 50 45 58 50 52 5f 54 59  euler, MPEXPR_TY
26a0: 50 45 5f 43 4f 4e 53 54 41 4e 54 20 7d 2c 0a 20  PE_CONSTANT },. 
26b0: 20 7b 20 22 6c 6f 67 65 32 22 2c 20 20 20 28 6d   { "loge2",   (m
26c0: 70 65 78 70 72 5f 66 75 6e 5f 74 29 20 65 5f 6d  pexpr_fun_t) e_m
26d0: 70 66 72 5f 63 6f 6e 73 74 5f 6c 6f 67 32 2c 20  pfr_const_log2, 
26e0: 20 4d 50 45 58 50 52 5f 54 59 50 45 5f 43 4f 4e   MPEXPR_TYPE_CON
26f0: 53 54 41 4e 54 20 7d 2c 0a 20 20 7b 20 22 6e 61  STANT },.  { "na
2700: 6e 22 2c 20 20 20 20 20 28 6d 70 65 78 70 72 5f  n",     (mpexpr_
2710: 66 75 6e 5f 74 29 20 6d 70 66 72 5f 73 65 74 5f  fun_t) mpfr_set_
2720: 6e 61 6e 2c 20 20 20 20 20 20 20 4d 50 45 58 50  nan,       MPEXP
2730: 52 5f 54 59 50 45 5f 43 4f 4e 53 54 41 4e 54 20  R_TYPE_CONSTANT 
2740: 7d 2c 0a 20 20 7b 20 22 69 6e 66 22 2c 20 20 20  },.  { "inf",   
2750: 20 20 28 6d 70 65 78 70 72 5f 66 75 6e 5f 74 29    (mpexpr_fun_t)
2760: 20 65 5f 6d 70 66 72 5f 73 65 74 5f 70 6f 73 69   e_mpfr_set_posi
2770: 6e 66 2c 20 20 4d 50 45 58 50 52 5f 54 59 50 45  nf,  MPEXPR_TYPE
2780: 5f 43 4f 4e 53 54 41 4e 54 20 7d 2c 0a 20 20 7b  _CONSTANT },.  {
2790: 20 22 70 69 22 2c 20 20 20 20 20 20 28 6d 70 65   "pi",      (mpe
27a0: 78 70 72 5f 66 75 6e 5f 74 29 20 65 5f 6d 70 66  xpr_fun_t) e_mpf
27b0: 72 5f 63 6f 6e 73 74 5f 70 69 2c 20 20 20 20 4d  r_const_pi,    M
27c0: 50 45 58 50 52 5f 54 59 50 45 5f 43 4f 4e 53 54  PEXPR_TYPE_CONST
27d0: 41 4e 54 20 7d 2c 0a 0a 20 20 7b 20 4e 55 4c 4c  ANT },..  { NULL
27e0: 20 7d 0a 7d 3b 0a 0a 5f 5f 67 6d 70 5f 63 6f 6e   }.};..__gmp_con
27f0: 73 74 20 73 74 72 75 63 74 20 6d 70 65 78 70 72  st struct mpexpr
2800: 5f 6f 70 65 72 61 74 6f 72 5f 74 20 2a 20 5f 5f  _operator_t * __
2810: 67 6d 70 5f 63 6f 6e 73 74 20 6d 70 66 72 5f 65  gmp_const mpfr_e
2820: 78 70 72 5f 73 74 61 6e 64 61 72 64 5f 74 61 62  xpr_standard_tab
2830: 6c 65 0a 3d 20 5f 6d 70 66 72 5f 65 78 70 72 5f  le.= _mpfr_expr_
2840: 73 74 61 6e 64 61 72 64 5f 74 61 62 6c 65 3b 0a  standard_table;.
2850: 0a 0a 69 6e 74 0a 23 69 66 20 48 41 56 45 5f 53  ..int.#if HAVE_S
2860: 54 44 41 52 47 0a 6d 70 66 72 5f 65 78 70 72 20  TDARG.mpfr_expr 
2870: 28 6d 70 66 72 5f 70 74 72 20 72 65 73 2c 20 69  (mpfr_ptr res, i
2880: 6e 74 20 62 61 73 65 2c 20 5f 5f 67 6d 70 5f 63  nt base, __gmp_c
2890: 6f 6e 73 74 20 63 68 61 72 20 2a 65 2c 20 2e 2e  onst char *e, ..
28a0: 2e 29 0a 23 65 6c 73 65 0a 6d 70 66 72 5f 65 78  .).#else.mpfr_ex
28b0: 70 72 20 28 76 61 5f 61 6c 69 73 74 29 0a 20 20  pr (va_alist).  
28c0: 20 20 20 76 61 5f 64 63 6c 0a 23 65 6e 64 69 66     va_dcl.#endif
28d0: 0a 7b 0a 20 20 6d 70 66 72 5f 73 72 63 70 74 72  .{.  mpfr_srcptr
28e0: 20 20 76 61 72 5b 4d 50 45 58 50 52 5f 56 41 52    var[MPEXPR_VAR
28f0: 49 41 42 4c 45 53 5d 3b 0a 20 20 76 61 5f 6c 69  IABLES];.  va_li
2900: 73 74 20 20 20 20 20 61 70 3b 0a 20 20 69 6e 74  st     ap;.  int
2910: 20 20 20 20 20 20 20 20 20 72 65 74 3b 0a 23 69           ret;.#i
2920: 66 20 48 41 56 45 5f 53 54 44 41 52 47 0a 20 20  f HAVE_STDARG.  
2930: 76 61 5f 73 74 61 72 74 20 28 61 70 2c 20 65 29  va_start (ap, e)
2940: 3b 0a 23 65 6c 73 65 0a 20 20 6d 70 66 72 5f 70  ;.#else.  mpfr_p
2950: 74 72 20 20 20 20 20 20 20 20 20 20 72 65 73 3b  tr          res;
2960: 0a 20 20 69 6e 74 20 20 20 20 20 20 20 20 20 20  .  int          
2970: 20 20 20 20 20 62 61 73 65 3b 0a 20 20 5f 5f 67       base;.  __g
2980: 6d 70 5f 63 6f 6e 73 74 20 63 68 61 72 20 20 2a  mp_const char  *
2990: 65 3b 0a 20 20 76 61 5f 73 74 61 72 74 20 28 61  e;.  va_start (a
29a0: 70 29 3b 0a 20 20 72 65 73 20 20 3d 20 76 61 5f  p);.  res  = va_
29b0: 61 72 67 20 28 61 70 2c 20 6d 70 66 72 5f 70 74  arg (ap, mpfr_pt
29c0: 72 29 3b 0a 20 20 62 61 73 65 20 3d 20 76 61 5f  r);.  base = va_
29d0: 61 72 67 20 28 61 70 2c 20 69 6e 74 29 3b 0a 20  arg (ap, int);. 
29e0: 20 65 20 20 20 20 3d 20 76 61 5f 61 72 67 20 28   e    = va_arg (
29f0: 61 70 2c 20 5f 5f 67 6d 70 5f 63 6f 6e 73 74 20  ap, __gmp_const 
2a00: 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a  char *);.#endif.
2a10: 0a 20 20 54 52 41 43 45 20 28 70 72 69 6e 74 66  .  TRACE (printf
2a20: 20 28 22 6d 70 66 72 5f 65 78 70 72 28 29 3a 20   ("mpfr_expr(): 
2a30: 62 61 73 65 20 25 64 2c 20 25 73 5c 6e 22 2c 20  base %d, %s\n", 
2a40: 62 61 73 65 2c 20 65 29 29 3b 0a 20 20 72 65 74  base, e));.  ret
2a50: 20 3d 20 6d 70 65 78 70 72 5f 76 61 5f 74 6f 5f   = mpexpr_va_to_
2a60: 76 61 72 20 28 28 76 6f 69 64 20 2a 2a 29 20 76  var ((void **) v
2a70: 61 72 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e  ar, ap);.  va_en
2a80: 64 20 28 61 70 29 3b 0a 0a 20 20 69 66 20 28 72  d (ap);..  if (r
2a90: 65 74 20 21 3d 20 4d 50 45 58 50 52 5f 52 45 53  et != MPEXPR_RES
2aa0: 55 4c 54 5f 4f 4b 29 0a 20 20 20 20 72 65 74 75  ULT_OK).    retu
2ab0: 72 6e 20 72 65 74 3b 0a 0a 20 20 72 65 74 75 72  rn ret;..  retur
2ac0: 6e 20 6d 70 66 72 5f 65 78 70 72 5f 61 20 28 6d  n mpfr_expr_a (m
2ad0: 70 66 72 5f 65 78 70 72 5f 73 74 61 6e 64 61 72  pfr_expr_standar
2ae0: 64 5f 74 61 62 6c 65 2c 20 72 65 73 2c 20 62 61  d_table, res, ba
2af0: 73 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  se,.            
2b00: 20 20 20 20 20 20 20 20 20 20 6d 70 66 72 5f 67            mpfr_g
2b10: 65 74 5f 70 72 65 63 20 28 72 65 73 29 2c 20 65  et_prec (res), e
2b20: 2c 20 73 74 72 6c 65 6e 28 65 29 2c 20 76 61 72  , strlen(e), var
2b30: 29 3b 0a 7d 0a                                   );.}.