17db96d56Sopenharmony_ci/*
27db96d56Sopenharmony_ci * Copyright (c) 2008-2020 Stefan Krah. All rights reserved.
37db96d56Sopenharmony_ci *
47db96d56Sopenharmony_ci * Redistribution and use in source and binary forms, with or without
57db96d56Sopenharmony_ci * modification, are permitted provided that the following conditions
67db96d56Sopenharmony_ci * are met:
77db96d56Sopenharmony_ci *
87db96d56Sopenharmony_ci * 1. Redistributions of source code must retain the above copyright
97db96d56Sopenharmony_ci *    notice, this list of conditions and the following disclaimer.
107db96d56Sopenharmony_ci *
117db96d56Sopenharmony_ci * 2. Redistributions in binary form must reproduce the above copyright
127db96d56Sopenharmony_ci *    notice, this list of conditions and the following disclaimer in the
137db96d56Sopenharmony_ci *    documentation and/or other materials provided with the distribution.
147db96d56Sopenharmony_ci *
157db96d56Sopenharmony_ci * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
167db96d56Sopenharmony_ci * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
177db96d56Sopenharmony_ci * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
187db96d56Sopenharmony_ci * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
197db96d56Sopenharmony_ci * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
207db96d56Sopenharmony_ci * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
217db96d56Sopenharmony_ci * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
227db96d56Sopenharmony_ci * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
237db96d56Sopenharmony_ci * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
247db96d56Sopenharmony_ci * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
257db96d56Sopenharmony_ci * SUCH DAMAGE.
267db96d56Sopenharmony_ci */
277db96d56Sopenharmony_ci
287db96d56Sopenharmony_ci
297db96d56Sopenharmony_ci#include <stdio.h>
307db96d56Sopenharmony_ci#include <stdlib.h>
317db96d56Sopenharmony_ci#include <time.h>
327db96d56Sopenharmony_ci#include <mpdecimal.h>
337db96d56Sopenharmony_ci
347db96d56Sopenharmony_ci
357db96d56Sopenharmony_ciint
367db96d56Sopenharmony_cimain(int argc, char **argv)
377db96d56Sopenharmony_ci{
387db96d56Sopenharmony_ci	mpd_context_t ctx;
397db96d56Sopenharmony_ci	mpd_t *a, *b;
407db96d56Sopenharmony_ci	mpd_t *result;
417db96d56Sopenharmony_ci	char *rstring;
427db96d56Sopenharmony_ci	char status_str[MPD_MAX_FLAG_STRING];
437db96d56Sopenharmony_ci	clock_t start_clock, end_clock;
447db96d56Sopenharmony_ci
457db96d56Sopenharmony_ci	if (argc != 3) {
467db96d56Sopenharmony_ci		fprintf(stderr, "div: usage: ./div x y\n");
477db96d56Sopenharmony_ci		exit(1);
487db96d56Sopenharmony_ci	}
497db96d56Sopenharmony_ci
507db96d56Sopenharmony_ci	mpd_init(&ctx, 38);
517db96d56Sopenharmony_ci	ctx.traps = 0;
527db96d56Sopenharmony_ci
537db96d56Sopenharmony_ci	result = mpd_new(&ctx);
547db96d56Sopenharmony_ci	a = mpd_new(&ctx);
557db96d56Sopenharmony_ci	b = mpd_new(&ctx);
567db96d56Sopenharmony_ci	mpd_set_string(a, argv[1], &ctx);
577db96d56Sopenharmony_ci	mpd_set_string(b, argv[2], &ctx);
587db96d56Sopenharmony_ci
597db96d56Sopenharmony_ci	start_clock = clock();
607db96d56Sopenharmony_ci	mpd_div(result, a, b, &ctx);
617db96d56Sopenharmony_ci	end_clock = clock();
627db96d56Sopenharmony_ci	fprintf(stderr, "time: %f\n\n",
637db96d56Sopenharmony_ci	           (double)(end_clock-start_clock)/(double)CLOCKS_PER_SEC);
647db96d56Sopenharmony_ci
657db96d56Sopenharmony_ci	rstring = mpd_to_sci(result, 1);
667db96d56Sopenharmony_ci	mpd_snprint_flags(status_str, MPD_MAX_FLAG_STRING, ctx.status);
677db96d56Sopenharmony_ci	printf("%s  %s\n", rstring, status_str);
687db96d56Sopenharmony_ci
697db96d56Sopenharmony_ci	mpd_del(a);
707db96d56Sopenharmony_ci	mpd_del(b);
717db96d56Sopenharmony_ci	mpd_del(result);
727db96d56Sopenharmony_ci	mpd_free(rstring);
737db96d56Sopenharmony_ci
747db96d56Sopenharmony_ci	return 0;
757db96d56Sopenharmony_ci}
767db96d56Sopenharmony_ci
777db96d56Sopenharmony_ci
78