Introduction
Introduction Statistics Contact Development Disclaimer Help
tbegin implementing randnum - numtools - perform numerical operations on vector…
git clone git://src.adamsgaard.dk/numtools
Log
Files
Refs
README
LICENSE
---
commit 8c9298b2b8694b8b32fa5c182299a6eab7706ebc
parent 932c3cef20eeebc528abd5e545959f8c04f305a0
Author: Anders Damsgaard <[email protected]>
Date: Tue, 3 May 2022 15:13:40 +0200
begin implementing randnum
Diffstat:
A randnum.c | 71 +++++++++++++++++++++++++++++…
1 file changed, 71 insertions(+), 0 deletions(-)
---
diff --git a/randnum.c b/randnum.c
t@@ -0,0 +1,71 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <err.h>
+#include <limits.h>
+#include <string.h>
+#include <math.h>
+
+#include "arg.h"
+#include "util.h"
+
+char *argv0;
+
+static void
+usage(void)
+{
+ errx(1, "usage: %s [-f fmtstr] [-h] [-n num] [-s] "
+ "val1 [val2 ...]\n", argv0);
+}
+
+int
+main(int argc, char *argv[])
+{
+ int i, ret, n = 1, N;
+ double val = 0.0, *weights = NULL;
+ char fmtstr[PATH_MAX] = "%g\n";
+
+ if (pledge("stdio", NULL) == -1)
+ err(2, "pledge");
+
+ ARGBEGIN {
+ case 'f':
+ ret = snprintf(fmtstr, sizeof(fmtstr), "%s", EARGF(usage()));
+ if (ret < 0 || (size_t)ret >= sizeof(fmtstr))
+ errx(1, "%s: could not write fmtstr", __func__);
+ break;
+ case 'h':
+ usage();
+ break;
+ case 'n':
+ n = atoi(EARGF(usage()));
+ break;
+ default:
+ usage();
+ } ARGEND;
+
+ if (argc < 1)
+ usage();
+
+ N = argc;
+ if (!(weights = calloc(N, sizeof(double))))
+ err(1, "calloc");
+
+ for (i = 0; i < N; i++) {
+ weights[i] = atof(argv[i]);
+ if (weights[i] <= 0.0)
+ errx(1, "weight %d is not positive (%g)", i, weights[i…
+ if (weights[i] > 1.0)
+ errx(1, "weight %d is greater than 1 (%g)", i, weights…
+ }
+ val = 0.0;
+ for (i = 0; i < N; i++)
+ val += weights[i];
+ if (fabs(val - 1.0) > 1e-3)
+ errx(1, "weights do not sum to 1 (%g)", val);
+
+
+
+ free(weights);
+
+ return 0;
+}
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.