numtools

perform numerical operations on vectors and matrices in unix pipes
git clone git://src.adamsgaard.dk/numtools # fast
git clone https://src.adamsgaard.dk/numtools.git # slow
Log | Files | Refs | README | LICENSE Back to index

commit 817421dee16bed3f985a841c575be086cfb3254a
parent d7ec07cf8c41de0a001237eded7af64e8868b345
Author: Anders Damsgaard <anders@adamsgaard.dk>
Date:   Wed, 11 May 2022 10:42:44 +0200

randcounts(1): add option to display output as ratios

Diffstat:
Mrandcounts.1 | 3+++
Mrandcounts.c | 12+++++++++---
2 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/randcounts.1 b/randcounts.1 @@ -9,6 +9,7 @@ .Op Fl h .Op Fl n Ar num .Op Fl r Ar repeats +.Op Fl R .Op Fl s Ar seed .Ar weight1 .Op Ar weight2 ... @@ -37,6 +38,8 @@ Number of points to place in the bins. The default is 1. .It Fl r Ar repeats Repeat the binning several times, with one realization per line of output. +.It Fl R +Show the output as ratios (in the range [0;1]) instead of counts. .It Fl s Ar seed Seed the pseudo-random number generator with this value, which is used to generate reproducable binning. diff --git a/randcounts.c b/randcounts.c @@ -14,7 +14,7 @@ char *argv0; static void usage(void) { - errx(1, "usage: %s [-h] [-n num] [-r repeats] [-s seed] " + errx(1, "usage: %s [-h] [-n num] [-r repeats] [-R] [-s seed] " "weight1 [weight2 ...]\n", argv0); } @@ -22,7 +22,7 @@ int main(int argc, char *argv[]) { int i, s = 0, N; - long j, seed, *counts = NULL, n = 1, r, repeats = 1; + long j, seed, *counts = NULL, n = 1, r, repeats = 1, ratio = 0; double val = 0.0, weightsum = 0.0, *weights = NULL; struct timeval t1; @@ -39,6 +39,9 @@ main(int argc, char *argv[]) case 'r': repeats = atol(EARGF(usage())); break; + case 'R': + ratio = 1; + break; case 's': s = 1; seed = atol(EARGF(usage())); @@ -94,7 +97,10 @@ main(int argc, char *argv[]) } } for (i = 0; i < N; i++) { - printf("%ld", counts[i]); + if (ratio) + printf("%.17g", (double)counts[i] / n); + else + printf("%ld", counts[i]); if (i < N - 1) putchar('\t'); else