• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2008-2024 Stefan Krah. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24  * SUCH DAMAGE.
25  */
26 
27 
28 #include <stdio.h>
29 #include <stdlib.h>
30 #include <time.h>
31 #include <mpdecimal.h>
32 
33 
34 int
main(int argc,char ** argv)35 main(int argc, char **argv)
36 {
37 	mpd_context_t ctx;
38 	mpd_t *a, *b;
39 	mpd_t *result;
40 	char *rstring;
41 	char status_str[MPD_MAX_FLAG_STRING];
42 	clock_t start_clock, end_clock;
43 
44 	if (argc != 3) {
45 		fprintf(stderr, "pow: usage: ./pow x y\n");
46 		exit(1);
47 	}
48 
49 	mpd_init(&ctx, 38);
50 	ctx.traps = 0;
51 
52 	result = mpd_new(&ctx);
53 	a = mpd_new(&ctx);
54 	b = mpd_new(&ctx);
55 	mpd_set_string(a, argv[1], &ctx);
56 	mpd_set_string(b, argv[2], &ctx);
57 
58 	start_clock = clock();
59 	mpd_pow(result, a, b, &ctx);
60 	end_clock = clock();
61 	fprintf(stderr, "time: %f\n\n",
62 	           (double)(end_clock-start_clock)/(double)CLOCKS_PER_SEC);
63 
64 	rstring = mpd_to_sci(result, 1);
65 	mpd_snprint_flags(status_str, MPD_MAX_FLAG_STRING, ctx.status);
66 	printf("%s  %s\n", rstring, status_str);
67 
68 	mpd_del(a);
69 	mpd_del(b);
70 	mpd_del(result);
71 	mpd_free(rstring);
72 
73 	return 0;
74 }
75 
76 
77