[BACK]Return to run-expr.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / gmp / demos / expr

Annotation of OpenXM_contrib/gmp/demos/expr/run-expr.c, Revision 1.1.1.1

1.1       ohara       1: /* Demo program to run expression evaluation.
                      2:
                      3: Copyright 2000, 2001, 2002 Free Software Foundation, Inc.
                      4:
                      5: This file is part of the GNU MP Library.
                      6:
                      7: The GNU MP Library is free software; you can redistribute it and/or modify
                      8: it under the terms of the GNU Lesser General Public License as published by
                      9: the Free Software Foundation; either version 2.1 of the License, or (at your
                     10: option) any later version.
                     11:
                     12: The GNU MP Library is distributed in the hope that it will be useful, but
                     13: WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
                     14: or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
                     15: License for more details.
                     16:
                     17: You should have received a copy of the GNU Lesser General Public License
                     18: along with the GNU MP Library; see the file COPYING.LIB.  If not, write to
                     19: the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
                     20: MA 02111-1307, USA. */
                     21:
                     22:
                     23: /* Usage: ./run-expr [-z] [-q] [-f] [-r] [-p prec] [-b base] expression...
                     24:
                     25:    Evaluate each argument as a simple expression.  By default this is in mpz
                     26:    integers, but -q selects mpq, -f selects mpf or -r selects mpfr (if
                     27:    available).  For mpf the float precision can be set with -p.  In all
                     28:    cases the input base can be set with -b, or the default is "0" meaning
                     29:    decimal with "0x" allowed.
                     30:
                     31:    This is a pretty trivial program, it's just an easy way to experiment
                     32:    with the evaluation functions.  */
                     33:
                     34:
                     35: #include <stdio.h>
                     36: #include <stdlib.h>
                     37: #include <unistd.h>
                     38:
                     39: #include "gmp.h"
                     40:
                     41: /* only to get HAVE_MPFR, not necessary for normal use */
                     42: #include "expr-impl.h"
                     43:
                     44: #include "expr.h"
                     45:
                     46: #if ! HAVE_DECL_OPTARG
                     47: extern char *optarg;
                     48: extern int optind, opterr;
                     49: #endif
                     50:
                     51:
                     52: #define TRY(exprfun, outfun, str)                       \
                     53:   {                                                     \
                     54:     ret = exprfun (res, base, str, foo, bar, NULL);     \
                     55:     printf ("\"%s\" base %d: ", str, base);             \
                     56:     if (ret == MPEXPR_RESULT_OK)                        \
                     57:       {                                                 \
                     58:         printf ("result ");                             \
                     59:         outfun;                                         \
                     60:         printf ("\n");                                  \
                     61:       }                                                 \
                     62:     else                                                \
                     63:       printf ("invalid (return code %d)\n", ret);       \
                     64:   }
                     65:
                     66:
                     67: int
                     68: main (int argc, char *argv[])
                     69: {
                     70:   int        type = 'z';
                     71:   int        base = 0;
                     72:   mp_size_t  prec = 64;
                     73:   int        obase, opt, i, ret;
                     74:
                     75:   while ((opt = getopt (argc, argv, "b:fp:qrz")) != EOF)
                     76:     {
                     77:       switch (opt) {
                     78:       case 'f':
                     79:       case 'q':
                     80:       case 'r':
                     81:       case 'z':
                     82:         type = opt;
                     83:         break;
                     84:       case 'b':
                     85:         base = atoi (optarg);
                     86:         break;
                     87:       case 'p':
                     88:         prec = atoi (optarg);
                     89:         break;
                     90:       case '?':
                     91:       default:
                     92:         abort ();
                     93:       }
                     94:     }
                     95:
                     96:   obase = (base == 0 ? 10 : base);
                     97:
                     98:   if (optind >= argc)
                     99:     {
                    100:       printf ("Usage: %s [-z] [-q] [-f] [-r] [-p prec] [-b base] expression...\n", argv[0]);
                    101:       exit (1);
                    102:     }
                    103:
                    104:   switch (type) {
                    105:   case 'z':
                    106:   default:
                    107:     {
                    108:       mpz_t  res, foo, bar;
                    109:
                    110:       mpz_init (res);
                    111:       mpz_init_set_ui (foo, 55L);
                    112:       mpz_init_set_ui (bar, 99L);
                    113:
                    114:       for (i = optind; i < argc; i++)
                    115:         TRY (mpz_expr, mpz_out_str (stdout, obase, res), argv[i]);
                    116:
                    117:       mpz_clear (res);
                    118:       mpz_clear (foo);
                    119:       mpz_clear (bar);
                    120:     }
                    121:     break;
                    122:
                    123:   case 'q':
                    124:     {
                    125:       mpq_t  res, foo, bar;
                    126:
                    127:       mpq_init (res);
                    128:       mpq_init (foo);
                    129:       mpq_init (bar);
                    130:
                    131:       mpq_set_ui (foo, 55L, 1);
                    132:       mpq_set_ui (bar, 99L, 1);
                    133:
                    134:       for (i = optind; i < argc; i++)
                    135:         TRY (mpq_expr, mpq_out_str (stdout, obase, res), argv[i]);
                    136:
                    137:       mpq_clear (res);
                    138:       mpq_clear (foo);
                    139:       mpq_clear (bar);
                    140:     }
                    141:     break;
                    142:
                    143:   case 'f':
                    144:     {
                    145:       mpf_t  res, foo, bar;
                    146:
                    147:       mpf_init2 (res, prec);
                    148:       mpf_init_set_ui (foo, 55L);
                    149:       mpf_init_set_ui (bar, 99L);
                    150:
                    151:       for (i = optind; i < argc; i++)
                    152:         TRY (mpf_expr, mpf_out_str (stdout, obase, 0, res), argv[i]);
                    153:
                    154:       mpf_clear (res);
                    155:       mpf_clear (foo);
                    156:       mpf_clear (bar);
                    157:     }
                    158:     break;
                    159:
                    160:   case 'r':
                    161: #if HAVE_MPFR
                    162:     {
                    163:       mpfr_t  res, foo, bar;
                    164:
                    165:       mpfr_init2 (res, prec);
                    166:       mpfr_init_set_ui (foo, 55L, GMP_RNDZ);
                    167:       mpfr_init_set_ui (bar, 99L, GMP_RNDZ);
                    168:
                    169:       for (i = optind; i < argc; i++)
                    170:         TRY (mpfr_expr,
                    171:              mpfr_out_str (stdout, obase, 0, res, GMP_RNDZ),
                    172:              argv[i]);
                    173:
                    174:       mpfr_clear (res);
                    175:       mpfr_clear (foo);
                    176:       mpfr_clear (bar);
                    177:     }
                    178: #else
                    179:     printf ("mpfr not compiled in\n");
                    180:     exit (1);
                    181: #endif
                    182:     break;
                    183:   }
                    184:
                    185:   return 0;
                    186: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>