From 4113c87e4d264c76d5b55a55bf41340e99b9c4ea Mon Sep 17 00:00:00 2001 From: NunoSempere Date: Thu, 1 Feb 2024 20:54:52 +0100 Subject: [PATCH] continue with big refactor - delete cdf functions from header file - delete docs - rework examples so as to not use sample_90_ci function - add a few items to README --- README.md | 33 +--- ROADMAP.md | 6 +- examples/more/00_example_template/example | Bin 31840 -> 27360 bytes examples/more/01_sample_from_cdf/example | Bin 36184 -> 0 bytes examples/more/01_sample_from_cdf/example.c | 102 ----------- examples/more/02_sample_from_cdf_beta/example | Bin 36168 -> 0 bytes .../more/02_sample_from_cdf_beta/example.c | 168 ------------------ examples/more/03_ci_beta/example | Bin 31840 -> 27368 bytes examples/more/03_ci_beta/example.c | 17 +- examples/more/04_nuclear_war/example | Bin 36024 -> 27472 bytes examples/more/04_nuclear_war/example.c | 24 +-- examples/more/05_burn_10kg_fat/example | Bin 35976 -> 27408 bytes examples/more/05_burn_10kg_fat/example.c | 17 +- examples/more/06_nuclear_recovery/example | Bin 36272 -> 27696 bytes examples/more/06_nuclear_recovery/example.c | 32 ++-- examples/more/07_algebra/example | Bin 31800 -> 27328 bytes .../more/08_algebra_and_conversion/example | Bin 31800 -> 27328 bytes examples/more/09_ergonomic_algebra/example | Bin 31800 -> 27328 bytes .../more/10_twitter_thread_example/example | Bin 31960 -> 27480 bytes .../11_billion_lognormals_paralell/example | Bin 31840 -> 27360 bytes .../more/12_time_to_botec_parallel/example | Bin 32000 -> 27520 bytes examples/more/13_parallelize_min/example | Bin 36000 -> 27424 bytes .../more/14_check_confidence_interval/example | Bin 31800 -> 27328 bytes examples/more/makefile | 2 - squiggle_more.c | 26 +-- squiggle_more.h | 25 +-- 26 files changed, 63 insertions(+), 389 deletions(-) delete mode 100755 examples/more/01_sample_from_cdf/example delete mode 100644 examples/more/01_sample_from_cdf/example.c delete mode 100755 examples/more/02_sample_from_cdf_beta/example delete mode 100644 examples/more/02_sample_from_cdf_beta/example.c diff --git a/README.md b/README.md index eba70a8..51f4bc0 100644 --- a/README.md +++ b/README.md @@ -195,10 +195,6 @@ The bailey: - I think the core interface is not likely to change much, though I've recently changed the interface for parallelism and for getting confidence intervals. - I am using this code for a few important consulting projects, and I trust myself to operate it correctly. -## Licensing - -This project is released under the MIT license, a permissive open-source license. You can see it in the LICENSE.txt file. - ## squiggle extra functions ### Division between core functions and squiggle_more expansions @@ -250,32 +246,7 @@ That said, I found adding parallelism to be an interesting an engaging task. Mos `squiggle_more.c` has some functions to do some simple algebra manipulations: sums of normals and products of lognormals. You can see some example usage [here](examples/more/07_algebra/example.c) and [here](examples/more/08_algebra_and_conversion/example.c). -#### Extra: cdf auxiliary functions +## Licensing -I provide some auxiliary functions that take a cdf, and return a sample from the distribution produced by that cdf. This might make it easier to program models, at the cost of a 20x to 60x slowdown in the parts of the code that use it. - -I don't have any immediate plans or reason to delete these functions, but I probably will, since they are too slow/inefficient for my taste. - -#### Extra: Error propagation vs exiting on error - -The process of taking a cdf and returning a sample might fail, e.g., it's a Newton method which might fail to converge because of cdf artifacts. The cdf itself might also fail, e.g., if a distribution only accepts a range of parameters, but is fed parameters outside that range. - -This library provides two approaches: - -1. Print the line and function in which the error occurred, then exit on error -2. In situations where there might be an error, return a struct containing either the correct value or an error message: - -```C -struct box { - int empty; - double content; - char* error_msg; -}; -``` - -The first approach produces terser programs but might not scale. The second approach seems like it could lead to more robust programs, but is more verbose. - -Behaviour on error can be toggled by the `EXIT_ON_ERROR` variable. This library also provides a convenient macro, `PROCESS_ERROR`, to make error handling in either case much terser—see the usage in example 4 in the examples/ folder. - -Overall, I'd describe the error handling capabilities of this library as pretty rudimentary. For example, this program might fail in surprising ways if you ask for a lognormal with negative standard deviation, because I haven't added error checking for that case yet. +This project is released under the MIT license, a permissive open-source license. You can see it in the LICENSE.txt file. diff --git a/ROADMAP.md b/ROADMAP.md index fd9d8c3..cfa3d3b 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -2,15 +2,17 @@ ## To do -- [ ] Big refactor +- [x] Big refactor - [ ] Come up with a better headline example; fermi paradox paper is too complicated - - [ ] Make README.md less messy + - [x] Make README.md less messy - [ ] Give examples of new functions + - [ ] Reference commit with cdf functions, even though deleted - [ ] Post on suckless subreddit - [ ] Drive in a few more real-life applications - [ ] US election modelling? - [ ] Look into using size_t instead of int for sample numbers - [ ] Reorganize code a little bit to reduce usage of gcc's nested functions +- [ ] Rename examples ## Done diff --git a/examples/more/00_example_template/example b/examples/more/00_example_template/example index d7d88bf514431eb1c87030cd27e29b24be13193f..c7304b6e4cd207cc976b4e04c9efcad4123ea7de 100755 GIT binary patch delta 7271 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 OJTm-YMM^?+)Bhi8*G}F5 delta 10796 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 M6j!HJNXsh!2d?b^+5i9m diff --git a/examples/more/01_sample_from_cdf/example.c b/examples/more/01_sample_from_cdf/example.c deleted file mode 100644 index f56dd4e..0000000 --- a/examples/more/01_sample_from_cdf/example.c +++ /dev/null @@ -1,102 +0,0 @@ -#include "../../../squiggle.h" -#include "../../../squiggle_more.h" -#include -#include -#include -#include - -#define NUM_SAMPLES 1000000 - -// Example cdf -double cdf_uniform_0_1(double x) -{ - if (x < 0) { - return 0; - } else if (x > 1) { - return 1; - } else { - return x; - } -} - -double cdf_squared_0_1(double x) -{ - if (x < 0) { - return 0; - } else if (x > 1) { - return 1; - } else { - return x * x; - } -} - -double cdf_normal_0_1(double x) -{ - double mean = 0; - double std = 1; - return 0.5 * (1 + erf((x - mean) / (std * sqrt(2)))); // erf from math.h -} - -// Some testers -void test_inverse_cdf_double(char* cdf_name, double cdf_double(double)) -{ - box result = inverse_cdf_double(cdf_double, 0.5); - if (result.empty) { - printf("Inverse for %s not calculated\n", cdf_name); - exit(1); - } else { - printf("Inverse of %s at %f is: %f\n", cdf_name, 0.5, result.content); - } -} - -void test_and_time_sampler_double(char* cdf_name, double cdf_double(double), uint64_t* seed) -{ - printf("\nGetting some samples from %s:\n", cdf_name); - clock_t begin = clock(); - for (int i = 0; i < NUM_SAMPLES; i++) { - box sample = sampler_cdf_double(cdf_double, seed); - if (sample.empty) { - printf("Error in sampler function for %s", cdf_name); - } else { - // printf("%f\n", sample.content); - } - } - clock_t end = clock(); - double time_spent = (double)(end - begin) / CLOCKS_PER_SEC; - printf("Time spent: %f\n", time_spent); -} - -int main() -{ - // Test inverse cdf double - test_inverse_cdf_double("cdf_uniform_0_1", cdf_uniform_0_1); - test_inverse_cdf_double("cdf_squared_0_1", cdf_squared_0_1); - test_inverse_cdf_double("cdf_normal_0_1", cdf_normal_0_1); - - // Testing samplers - // set randomness seed - uint64_t* seed = malloc(sizeof(uint64_t)); - *seed = 1000; // xorshift can't start with 0 - - // Test double sampler - test_and_time_sampler_double("cdf_uniform_0_1", cdf_uniform_0_1, seed); - test_and_time_sampler_double("cdf_squared_0_1", cdf_squared_0_1, seed); - test_and_time_sampler_double("cdf_normal_0_1", cdf_normal_0_1, seed); - - // Get some normal samples using a previous approach - printf("\nGetting some samples from sample_unit_normal\n"); - - clock_t begin_2 = clock(); - double* normal_samples = malloc(NUM_SAMPLES * sizeof(double)); - for (int i = 0; i < NUM_SAMPLES; i++) { - normal_samples[i] = sample_unit_normal(seed); - // printf("%f\n", normal_sample); - } - - clock_t end_2 = clock(); - double time_spent_2 = (double)(end_2 - begin_2) / CLOCKS_PER_SEC; - printf("Time spent: %f\n", time_spent_2); - - free(seed); - return 0; -} diff --git a/examples/more/02_sample_from_cdf_beta/example b/examples/more/02_sample_from_cdf_beta/example deleted file mode 100755 index 4156892bae7056fbc5e03eb75df4d2ce23eb6c4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36168 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 diff --git a/examples/more/02_sample_from_cdf_beta/example.c b/examples/more/02_sample_from_cdf_beta/example.c deleted file mode 100644 index 1449e8d..0000000 --- a/examples/more/02_sample_from_cdf_beta/example.c +++ /dev/null @@ -1,168 +0,0 @@ -#include "../../../squiggle.h" -#include "../../../squiggle_more.h" -#include -#include -#include -#include - -#define NUM_SAMPLES 10000 -#define STOP_BETA 1.0e-8 -#define TINY_BETA 1.0e-30 - -// Incomplete beta function -box incbeta(double a, double b, double x) -{ - // Descended from , - // - // but modified to return a box struct and doubles instead of doubles. - // [ ] to do: add attribution in README - // Original code under this license: - /* - * zlib License - * - * Regularized Incomplete Beta Function - * - * Copyright (c) 2016, 2017 Lewis Van Winkle - * http://CodePlea.com - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgement in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - */ - if (x < 0.0 || x > 1.0) { - return PROCESS_ERROR("x out of bounds [0, 1], in function incbeta"); - } - - /*The continued fraction converges nicely for x < (a+1)/(a+b+2)*/ - if (x > (a + 1.0) / (a + b + 2.0)) { - box symmetric_incbeta = incbeta(b, a, 1.0 - x); - if (symmetric_incbeta.empty) { - return symmetric_incbeta; // propagate error - } else { - box result = { - .empty = 0, - .content = 1 - symmetric_incbeta.content - }; - return result; - } - } - - /*Find the first part before the continued fraction.*/ - const double lbeta_ab = lgamma(a) + lgamma(b) - lgamma(a + b); - const double front = exp(log(x) * a + log(1.0 - x) * b - lbeta_ab) / a; - - /*Use Lentz's algorithm to evaluate the continued fraction.*/ - double f = 1.0, c = 1.0, d = 0.0; - - int i, m; - for (i = 0; i <= 200; ++i) { - m = i / 2; - - double numerator; - if (i == 0) { - numerator = 1.0; /*First numerator is 1.0.*/ - } else if (i % 2 == 0) { - numerator = (m * (b - m) * x) / ((a + 2.0 * m - 1.0) * (a + 2.0 * m)); /*Even term.*/ - } else { - numerator = -((a + m) * (a + b + m) * x) / ((a + 2.0 * m) * (a + 2.0 * m + 1)); /*Odd term.*/ - } - - /*Do an iteration of Lentz's algorithm.*/ - d = 1.0 + numerator * d; - if (fabs(d) < TINY_BETA) - d = TINY_BETA; - d = 1.0 / d; - - c = 1.0 + numerator / c; - if (fabs(c) < TINY_BETA) - c = TINY_BETA; - - const double cd = c * d; - f *= cd; - - /*Check for stop.*/ - if (fabs(1.0 - cd) < STOP_BETA) { - box result = { - .empty = 0, - .content = front * (f - 1.0) - }; - return result; - } - } - - return PROCESS_ERROR("More loops needed, did not converge, in function incbeta"); -} - -box cdf_beta(double x) -{ - if (x < 0) { - box result = { .empty = 0, .content = 0 }; - return result; - } else if (x > 1) { - box result = { .empty = 0, .content = 1 }; - return result; - } else { - double successes = 1, failures = (2023 - 1945); - return incbeta(successes, failures, x); - } -} - -// Some testers -void test_inverse_cdf_box(char* cdf_name, box cdf_box(double)) -{ - box result = inverse_cdf_box(cdf_box, 0.5); - if (result.empty) { - printf("Inverse for %s not calculated\n", cdf_name); - exit(1); - } else { - printf("Inverse of %s at %f is: %f\n", cdf_name, 0.5, result.content); - } -} - -void test_and_time_sampler_box(char* cdf_name, box cdf_box(double), uint64_t* seed) -{ - printf("\nGetting some samples from %s:\n", cdf_name); - clock_t begin = clock(); - for (int i = 0; i < NUM_SAMPLES; i++) { - box sample = sampler_cdf_box(cdf_box, seed); - if (sample.empty) { - printf("Error in sampler function for %s", cdf_name); - } else { - // printf("%f\n", sample.content); - } - } - clock_t end = clock(); - double time_spent = (double)(end - begin) / CLOCKS_PER_SEC; - printf("Time spent: %f\n", time_spent); -} - -int main() -{ - // Test inverse cdf box - test_inverse_cdf_box("cdf_beta", cdf_beta); - - // Test box sampler - uint64_t* seed = malloc(sizeof(uint64_t)); - *seed = 1000; // xorshift can't start with 0 - test_and_time_sampler_box("cdf_beta", cdf_beta, seed); - // Ok, this is slower than python!! - // Partly this is because I am using a more general algorithm, - // which applies to any cdf - // But I am also using absurdly precise convergence conditions. - // This could be optimized. - - free(seed); - return 0; -} diff --git a/examples/more/03_ci_beta/example b/examples/more/03_ci_beta/example index 497dcc94fbe68a3ddab85b0d7173841119a5c19f..7022d140d2d6d097f42a99d466a7f556d2775bc1 100755 GIT binary patch delta 8153 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 C=$6C) delta 11693 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 diff --git a/examples/more/03_ci_beta/example.c b/examples/more/03_ci_beta/example.c index 78019f2..fd9581c 100644 --- a/examples/more/03_ci_beta/example.c +++ b/examples/more/03_ci_beta/example.c @@ -4,9 +4,9 @@ #include // Estimate functions -double beta_1_2_sampler(uint64_t* seed) +double sample_beta_3_2(uint64_t* seed) { - return sample_beta(1, 2.0, seed); + return sample_beta(3.0, 2.0, seed); } int main() @@ -15,9 +15,16 @@ int main() uint64_t* seed = malloc(sizeof(uint64_t)); *seed = 1000; // xorshift can't start with 0 - ci beta_1_2_ci_90 = sampler_get_90_ci(beta_1_2_sampler, 1000000, seed); - printf("90%% confidence interval of beta(1,2) is [%f, %f]\n", beta_1_2_ci_90.low, beta_1_2_ci_90.high); - printf("You can check this in \n"); + int n_samples = 1 * MILLION; + double* xs = malloc(sizeof(double) * (size_t)n_samples); + for (int i = 0; i < n_samples; i++) { + xs[i] = sample_beta_3_2(seed); + } + + printf("\n# Stats\n"); + array_print_stats(xs, n_samples); + printf("\n# Histogram\n"); + array_print_histogram(xs, n_samples, 23); free(seed); } diff --git a/examples/more/04_nuclear_war/example b/examples/more/04_nuclear_war/example index 3c552e818217949d9addb082ca35a39742456be1..a1994d071e86fb454cde48732311d9af71e3c79e 100755 GIT binary patch delta 8563 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 E-%-N;x&QzG delta 12179 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 Mv_)%0V~rF34?sk@jQ{`u diff --git a/examples/more/04_nuclear_war/example.c b/examples/more/04_nuclear_war/example.c index 9cf0678..065815c 100644 --- a/examples/more/04_nuclear_war/example.c +++ b/examples/more/04_nuclear_war/example.c @@ -34,7 +34,7 @@ double probability_of_dying_eli(uint64_t* seed) return probability_of_dying; } -double mixture(uint64_t* seed) +double sample_nuclear_model(uint64_t* seed) { double (*samplers[])(uint64_t*) = { probability_of_dying_nuno, probability_of_dying_eli }; double weights[] = { 0.5, 0.5 }; @@ -47,23 +47,17 @@ int main() uint64_t* seed = malloc(sizeof(uint64_t)); *seed = 1000; // xorshift can't start with 0 - int n = 1000 * 1000; - - double* mixture_result = malloc(sizeof(double) * (size_t)n); + int n = 1 * MILLION; + double* xs = malloc(sizeof(double) * (size_t)n); for (int i = 0; i < n; i++) { - mixture_result[i] = mixture(seed); + xs[i] = sample_nuclear_model(seed); } - printf("mixture_result: [ "); - for (int i = 0; i < 9; i++) { - printf("%.6f, ", mixture_result[i]); - } - printf("... ]\n"); + printf("\n# Stats\n"); + array_print_stats(xs, n); + printf("\n# Histogram\n"); + array_print_90_ci_histogram(xs, n, 20); - ci ci_90 = sampler_get_90_ci(mixture, 1000000, seed); - printf("mean: %f\n", array_mean(mixture_result, n)); - printf("90%% confidence interval: [%f, %f]\n", ci_90.low, ci_90.high); - - free(mixture_result); + free(xs); free(seed); } diff --git a/examples/more/05_burn_10kg_fat/example b/examples/more/05_burn_10kg_fat/example index 02fb6900e988c2951889c5542b2baa32fc68e11a..4a7c6cb7effeb16ee4c6f281c2c83d1f66704216 100755 GIT binary patch delta 8170 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 S&i1V@2>V%w#wB8jQ~np_CSGFz diff --git a/examples/more/05_burn_10kg_fat/example.c b/examples/more/05_burn_10kg_fat/example.c index a2b7d82..b690ec5 100644 --- a/examples/more/05_burn_10kg_fat/example.c +++ b/examples/more/05_burn_10kg_fat/example.c @@ -27,22 +27,17 @@ int main() *seed = 1000; // xorshift can't start with 0 int n = 1000 * 1000; - - double* result = malloc(sizeof(double) * (size_t)n); + double* xs = malloc(sizeof(double) * (size_t)n); for (int i = 0; i < n; i++) { - result[i] = sample_minutes_per_day_jumping_rope_needed_to_burn_10kg(seed); + xs[i] = sample_minutes_per_day_jumping_rope_needed_to_burn_10kg(seed); } printf("## How many minutes per day do I have to jump rope to lose 10kg of fat by the end of the year?\n"); - printf("Mean: %f\n", array_mean(result, n)); - printf("A few samples: [ "); - for (int i = 0; i < 9; i++) { - printf("%.6f, ", result[i]); - } - printf("... ]\n"); - ci ci_90 = sampler_get_90_ci(sample_minutes_per_day_jumping_rope_needed_to_burn_10kg, 1000000, seed); - printf("90%% confidence interval: [%f, %f]\n", ci_90.low, ci_90.high); + printf("\n# Stats\n"); + array_print_stats(xs, n); + printf("\n# Histogram\n"); + array_print_histogram(xs, n, 23); free(seed); } diff --git a/examples/more/06_nuclear_recovery/example b/examples/more/06_nuclear_recovery/example index 682fb84ca95c160268713313ab622f72b1f9dbbf..ede60202471e8576f2a8e1035b734feefcd70b13 100755 GIT binary patch delta 8516 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 e8)IOHH7gX}UKCt9M`a?Z2HfxPFkvF5k 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�o*} ze8Bm~B9iNAq+VFV$W>_a@>^86jmBy1$vVExz#STpuG{V&9q%gEa3l2oqT}Vdb@ZJp zC>lOP=+?b#c+-UKLlgVbH9^KjCsN1T_0y(KSIEJ{#nGNTz1OB6GKQ;5b-X%PWB)DM zRPr#r4T&kcoj1=v>U91dJ(jxlo)d=a^z_Fs*63TO@q2_W`o9zuQTGd7w`dvV!o8IhDGGQ?)V_3zKXfd0f9=e{<*lgXo#@Vn2c(`VJg}9`)uxTn%_?GshUUx!F{Mx;EYR zb=r!A0v)d&s{y(tgqb?-b7?rei&D7;IR8m*!dji9TOV1WF$lL1PPBzf_Fg{q4%V zA|1NByKAdOaSsc3XNA)hoQgs3WEDV-8=652*baAAFumtek=bGQ)ZjtAHOPXmn;K!< z_Y7*2*wxqFj2}-Ny)KIt)!Ue@K0CZCToYi>YF1I76=7@~gMK%O-Bq6%V%*sVXR;&p zQ*FjgO{d)~ydf*xxThI(C#z`4iZE_z2F(j%cQs^&7`NX3Ms}oON{Dgm7;I!AtEPmU zzmctBvsX@UsgNYOW57?*CJ^%m! diff --git a/examples/more/06_nuclear_recovery/example.c b/examples/more/06_nuclear_recovery/example.c index f3cbeaf..9d3e3ae 100644 --- a/examples/more/06_nuclear_recovery/example.c +++ b/examples/more/06_nuclear_recovery/example.c @@ -46,41 +46,37 @@ int main() uint64_t* seed = malloc(sizeof(uint64_t)); *seed = 1000; // xorshift can't start with 0 - int num_samples = 1000000; + int n_samples = 1000000; // Before a first nuclear collapse printf("## Before the first nuclear collapse\n"); - ci ci_90_2023 = sampler_get_90_ci(yearly_probability_nuclear_collapse_2023, 1000000, seed); - printf("90%% confidence interval: [%f, %f]\n", ci_90_2023.low, ci_90_2023.high); - - double* yearly_probability_nuclear_collapse_2023_samples = malloc(sizeof(double) * (size_t)num_samples); - for (int i = 0; i < num_samples; i++) { + double* yearly_probability_nuclear_collapse_2023_samples = malloc(sizeof(double) * (size_t)n_samples); + for (int i = 0; i < n_samples; i++) { yearly_probability_nuclear_collapse_2023_samples[i] = yearly_probability_nuclear_collapse_2023(seed); } - printf("mean: %f\n", array_mean(yearly_probability_nuclear_collapse_2023_samples, num_samples)); + ci ci_90_2023 = array_get_90_ci(yearly_probability_nuclear_collapse_2023_samples, n_samples); + printf("90%% confidence interval: [%f, %f]\n", ci_90_2023.low, ci_90_2023.high); // After the first nuclear collapse printf("\n## After the first nuclear collapse\n"); - ci ci_90_2070 = sampler_get_90_ci(yearly_probability_nuclear_collapse_after_recovery_example, 1000000, seed); - printf("90%% confidence interval: [%f, %f]\n", ci_90_2070.low, ci_90_2070.high); - double* yearly_probability_nuclear_collapse_after_recovery_samples = malloc(sizeof(double) * (size_t)num_samples); - for (int i = 0; i < num_samples; i++) { + double* yearly_probability_nuclear_collapse_after_recovery_samples = malloc(sizeof(double) * (size_t)n_samples); + for (int i = 0; i < n_samples; i++) { yearly_probability_nuclear_collapse_after_recovery_samples[i] = yearly_probability_nuclear_collapse_after_recovery_example(seed); } - printf("mean: %f\n", array_mean(yearly_probability_nuclear_collapse_after_recovery_samples, num_samples)); + ci ci_90_2070 = array_get_90_ci(yearly_probability_nuclear_collapse_after_recovery_samples, 1000000); + printf("90%% confidence interval: [%f, %f]\n", ci_90_2070.low, ci_90_2070.high); // After the first nuclear collapse (antiinductive) printf("\n## After the first nuclear collapse (antiinductive)\n"); - ci ci_90_antiinductive = sampler_get_90_ci(yearly_probability_nuclear_collapse_after_recovery_antiinductive, 1000000, seed); - printf("90%% confidence interval: [%f, %f]\n", ci_90_antiinductive.low, ci_90_antiinductive.high); - - double* yearly_probability_nuclear_collapse_after_recovery_antiinductive_samples = malloc(sizeof(double) * (size_t)num_samples); - for (int i = 0; i < num_samples; i++) { + double* yearly_probability_nuclear_collapse_after_recovery_antiinductive_samples = malloc(sizeof(double) * (size_t)n_samples); + for (int i = 0; i < n_samples; i++) { yearly_probability_nuclear_collapse_after_recovery_antiinductive_samples[i] = yearly_probability_nuclear_collapse_after_recovery_antiinductive(seed); } - printf("mean: %f\n", array_mean(yearly_probability_nuclear_collapse_after_recovery_antiinductive_samples, num_samples)); + ci ci_90_antiinductive = array_get_90_ci(yearly_probability_nuclear_collapse_after_recovery_antiinductive_samples, 1000000); + printf("90%% confidence interval: [%f, %f]\n", ci_90_antiinductive.low, ci_90_antiinductive.high); + // free seeds free(yearly_probability_nuclear_collapse_2023_samples); free(yearly_probability_nuclear_collapse_after_recovery_samples); free(yearly_probability_nuclear_collapse_after_recovery_antiinductive_samples); diff --git a/examples/more/07_algebra/example b/examples/more/07_algebra/example index 2b171ce86162a9af52cb660d526b40761116de85..826e26461d58265fc9a612c3438464b627b44ea0 100755 GIT binary patch delta 7504 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 So!n7n9bTbIX%fA)Df6GYH(j;> delta 10814 zcmb7K3s_XwwLWu(k@w61BFIAyI6UM%JVaC?qaX*12`WTH5Qu<~AW#Ksjd4sAb&4d| zo%SYadoOx#dz0Ke@Y4Im+B6P65;Z18lNh5WqUJF~6Oq)G#>CTq?{f~EpuOMM%{R05 z`uEyvuf5jVk8=j+2f72Jy6#~A>d71{xiaB4w(W`ko#&vp%nt7PD8*ivDKjeN%rdV7 zaii5@nV(3VJ~FOSZNEuq8m^Grhns##1-;DY%9QNX`T28|GRCb{DS1)%Ze;H=nVm?R zsBI`s?(Hr$2S;uR{&I@}p@{0E zHgmei={HZYF!Cq;bn?6*SeHvK>ksLY`}VrI>vX|jf{4?wk@UE^>7vMfK7bTY^3=8V zl}`%N8LO(+H@B{9Y;LQsTHWvnX?0&k&b#~O7ZerFUr?2noSvLP^>cdsarn4#1`O=R zcs=UwKs~_msL3+!oTu7OB0Q%0<-=AQpT)+!KmEHJlzyJM0KV#g5OY z5@)r6qYWq?tqPUN7=Nxs2B_azo+<5v8r)04C~;|UlLj9KPRC~foT6zM)pVc%Rg0h) zWB?GRf}nAVJdJ@eS=O4W!Fi4Rta029hmDuq@dgBFyoef{Wt-AetikEvYAMs;V_rpL zwFXCQP}uxAu0hkFEOFM{s=<|2%kYgF97!-%wrX(W7|L3KcL`?soR1yikzAb!5aLy2A`_I2Q+v{-(K$ox1XDR zBC0q}>~Oa6(tx<_sK*f|FJ+Fb;l_~QyMfyY=tWBh(aM>$mBEUuOu%`4&@Ci$%)C~@!$5S$NcRq^2gwK{=+N=9?T*>Q=js( zW>JT&^0j7>-%ef0|9&RnLt=R{lO%*#`1YA(Nyr}pPiDe2>%fS~FOT|lh3|d<#1=T2 zq=#nnVkT)0P2i_zl3#^dcta-X4<*56IQ~peY=uKdOclPHz#$%nO&O#qEQSxsAWw%y z@=`i^Eo_?UQaUEFCcd>R(TzmZNn!lQY6I!OutI_jx3+I_`2I&>%M^`^M@ zP=`S)4&!5ZHI2-hmdfX(ksnW+M#-LOOCnBMX(zuTi+RLU*6;e!_jCX=W6j|&TZt}W z0pDsR3nLDOzk~=w)W_mVgU?0B4Rxkw!=BW>aN%`5e<88&!t_+V_Ye}$>O_u|#rI8# zy{7YeG@eZ@^Y#qlJtKyHG?t{#5P54Xd2B|vzl6;C#nu2G1B9rg}LWTQk4|LPl+YniShgs7V>&x)_u?Zoq3?vVs?C4;*aNXbYGgs9`|BF7hOmZ>hoh?b9Y zwSyP8UH4Eok*+B6LP`!l=_+xhEaul-Az7&n{BMN5y{Xf5{9_TM-+Div6hZvb;^x#u zaGbJHBt49}Yu}(GU6~qlA~!!{%>Dm9tgiGu+T;mf#}m82tD};V9}K5tT)}b0HB+oRAiqfuUhv^u7(p$0L*5{B?o5M&wjC8$R@y3Tm9|y3s-XoKLG1K>iHahB z#zg-IqC+v4$Y^>*Ks#-mu4z0qjl^dp`Y(jRG~r&6X;N|oX~>A=`@%?PMx6gmXrQf2 z4%H`Nr$b6gP}pCCGJ7R2`Nt`#>)W~PN-@G)7L8Ot9G?c1KY zTsN;Kgla=t2-`-}wuE5fPAK<1A4cJL)K?uxbCE>=+GGi?H>D)KiM9>?;Bzb?BqS># zq!~I6P*>zzKXpBKL6SQ2EVIO}q@^LGDk~%0oi@{bA3233S4QnA8^#XvuIs)Fq&F+b z?<(#OG>l)#VVrV-oXg4z|M)zO`n7gfXNkoFar`Z$)HwE_X0Tp(;<*9yprottqQ z{V)ta{)mO)JhtG2*ha>}umUzs5M9Vr_`XU-wGn#-gIs$L<{ry)U~_i80hO41;G|I8 z^YSoNEFE+7;~^w4dkKFwh%{u+u-~3JA+k%MWGD&~ZmxeaBX6D=Bn* zC-#4#FI{Hqs<4=_ZpzrQf@-?G){32O(b%|fdgWO}r17{2t^Kj;lwpu!- zrk7ZHdd0b3J!h9BTlU2*DYmXWizKdoZ^pTzuFW6dFwf(4Vpqj6uDi%_1H*gRq_ZP7 zlV8DTVfLl=YXDu#K9nRR;R*N@o~4_m6|RF&{3$?5FX0A?P+UPO^@E~hMXiky$~@z+5+!E?xP>dq3ewcfG<;(R|0W3B-wE^ahMJe9}8PLU#k(o+WGuT zq!Bx`;Je1NiWp>RX2MZot(Y!Hs67B_RR-OM$2Wr`t{v!7KNfoNz;n;i^1?joU#EDW zzP^46K3_Bb_|UUBNFlu)9wo12+xU0RlAGD9__b%rlG$lljt|)I7#Rk-S?Ex%b{X@b z+-Y0~ux3~Jin#V;rO`7yFk><~I6G?QGjI!=7LJUHemS{Z*W}Lfxm`j}6ZsNSb`sk9 zU8g=E{&S|=k)kJ-iH~3Rz)IHS<95p^R=(BQai+aabX=u7K63dW-3@HTR%cO{!2mP< z@D~7Y&@a(($rbiK^5ZQx3l%Cv?s$OWP_D3;%gV)0S>w1v6UE1mdhm9RD{>63v{f7t z9V0BWu_OF99(Y`@LYusA97D||;EO&hur*b>Omut$n{pAV@UwVq0u9`Prwnc?@hhRbo*>-W##g?T@Z>u&guP3SDr}kzCWi9h0y>q+lXyJ1#-=P=*52 z4l|~iyZtNEc6U_J0l91TeFU}~q|-)#t|CCEki>7Be&safAKvaXbv%a_Ag4{gI&8{g zhsQPk3>~Kg4}2{>tf{TA(o_K>klf?mwLJ zmxAwEJa8(;U}zX~Y`e4FABKEnva6PC--KO^Mi2d2^ytE;3lt`>wJ>Webf%8|Xu^8P zrJ=*wc%(jAbuor(qo$_Z+)#nxu^LkXhY?P8uw;IX8jx>HJKOL~U_0PL<4+$HV4(F3 zE*%JdC=Gr+mddrCnIdwjXD{P}>@T}IWMw<;R%V&0?98=&_1%~Sojbf``k6m%?(o64 z(hK_o>v?(TZy3)tcv{IJd1t0sWd8=azY)0)9f5l=XX>wPm>?%ZQCE{CRm4}ZCa1Pr z8qmS&lvh3r65WjYvCo0QT~K-tM^-8{p^onoi@5`K1+Y=*z7OHU^0rfAXVPt!VkSqW z(cbY_Q^y@-6}SouP7I_dO*`Z=ocFP5$6+`CHJ53}EIIcO!94ci&%#){J->?bb8Fcb}7fB$e$tl!;jF@)rL)dV#SX$`@ z)KCTw(wt!15ZimO?aJ)l;CO8sCZ>^#zq3 z9Qu)+31bbYbIgO{p>Wkj<9H#(4R_;fDE<|+xI8drbs3KBl%nIqQqge>?u*l8FrF=N z+lW0QNp=y7&hfSDI(>Y@iHF>5@v#)*^fzPa`&cLzJU0DyZ>;(_%$qKH*E8?_ivzxf z^{0$C_gi^9`@b?^+=Kx!v+qU6-!M7huE`aRkL8ECb-GzPob6#hoDR}B1i9T#Z-xOd)<~yTUY*_BAh&3Nd{l?N`k=E4%(( z!Dq}Cgy>o?iYnp>XjIYY^@&1mqR`kZM6ZWH?F=p&3h~8Nk`1=mHH+(Nnr92qP4!;F zvbI{KCS*oOD^+XiST$`N%^XLw#?kC?G&c<{RsO?= zuq;rJ|E&DkPJ$PN+38OpiCC?zuS-%7>Vtohq~oB&po5^rha`z!a(bPTvf9+f1z?1zs@($k=+Z%I-wXzy`JdLPt`Si9jRcQvR*j~C8P zRPq3%A~DK9TS1#Zhe5Ye90vayv>K`EqU~6Z8Mw@wan;!hT8s56+Ik(H04=_O0YROh^cI&oEJ?+nJ)murzloVs9(2@$l;_2S3vgx%M&$C` z*~P(vDqdZ2#}7(UEBQ^{bh{a0U`2=| z+QMn~wVjZpI;f(B+I$_|27pno(87FywD}I$Pi2UiH5pjLNwR5S2*3Mn^2>#b_||vG z6_AW~Npis=e%GJLrh@zVjRWLlK@4Agnv4|0Oc9Yf8x$qX?MSEJpCJ#6Y4oQvuIVh< zCvKWVlPc^yi7H$*y9mNAuo;&mX*NdW78=b@@$-$rPwL^jF1Pu{xZMWPn7U(<%{XhD zd!eygr{{SucP4-DZK8a-wKe+hWC9Syy-1FYW7=NW^y=?jcKZmW#XyDc*I zx~&7XfiL$m2Im>g^Nk)hZ!Q($E_8k$eRGu=v%Wj@Hlwi3t-x5V->ma83Q%Wboqpuq zgg#+dFoT~;(mAD17rbN--mT9w3Og`L+&04^V~;`Kqcc8l$T#*Hnm{qQfv@y3#zDwt z44$vpz!!QcLW{ibRn7N~!+^UnU@?|(1M2bw3yi@#Fu`12R3=o#W<-VQ@_zdN7iO{o zWIu)MImp(a&gC1;JNQNLtIf-3wlNv%UJopLi;E(=5o=_w@jf#)&q=?7-%T8UTj=cwN-#_!W4a!H`xlM_LMbfb*(<_5@;B?Y8+ z$rQbb>mmD>1lc(}Bup%N&W}?apl#E0crGl~B63|1CF(Et+EzW5jKEfe7Nx&A2Xcx- zu>>_m&rKQoby)+W1Dv#0i^z37wi?yV+EzV>xV35#RX&7Me-xGx^5)W|Q@hoWC_U)b z$zyA966>;{LNzy(M$U$cjtk-9lmW0IvO*oByT=560-S2gC3}_y@xx8z#bv9enxo}T zo=Wd86d{2`mZa!jCoe3EB~IRrY%U42tG~C)Jvh!EeRTKmNGQ`a=2}&pOJ?}pA+j+& zcYAOLHdLPTQTBF@1eN;n#rY(@G)A|L{!fJU7wG7Z8CBCm4y6R!G%foSd~kux*T{tX zKiW%ol004-G<7Frg?ohObEcVIWT@s=MFZPBpv4<&$BbU)2|@KIwg-czMxmAV>QPo} zCbZBphqcyFo&4Pyy_~k%*DHMom6hDC^nFahow2g6ECqj3!MDzlaiy8-QSgDeGR_VT zR1Yb5tAeY`;S(8;=W>k?d5}F2+2#k^)r|!#D;8Afj0Odn&yWdcRq-eppm$ta zauu9gAoFVK6f3xSLSP<|@pw*1kUOXskIm`;c`{xn6K*#%w?}DhrJDqb8n*ok?o5~Q zM{!2eav761W4B11kh$+D@~KLgdu4I16Y_N0>i=`G+bG&D$nw}P=}$W-I>q<&`a?VP zDha73-ggQvM9T6%l?mq#!>BQ;eu;Ob<;-KXHr z2pPy%@I?wPuc7wHr1`8&y-cQHO*`4){(`Pc|U|(+8=7FBi)tT z{Zwf@s#ayER;_L%0jn1KYo1H1YMF3f)vEbAlPXPhKh%Q%imTe<+q$l0b=~^)Rdwsu zwX7rI)n!Iiit1e5*wOm6oQFs5Qx6>Mf`&pOml3G8fBT)vc|K-Mr`~*2+C(m|N%2?jJu2;S zCs7T_Ug|w^xPp{7%=A)^_R$LR9N4itP9-_tFw;-H+L){4afeA{W2&dRkyMlN#w?XH tSCi)&=jp1+`Nnyk)v|cC4~cqsre_bm{-gYf)I6N!S-D>3Lg3?we*l=U;FJIW diff --git a/examples/more/09_ergonomic_algebra/example b/examples/more/09_ergonomic_algebra/example index fca55dc92fb042cdffb4642b2e79654271ff4e37..610916208637be4695a5a7aa5a2addf999eb5c56 100755 GIT binary patch delta 7331 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 delta 10742 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≦9mH!hXtkvD78yhO!1BDq-;K`qgHVv)UTcg|~~esI*!u`0Lg9_e%9%rqHqsvVV1|w|XrrFC-(Yv;9kCEov?l z^dzr7)nC1fsdNWO VKT5t{lkGjaL6#2Fk#AN-{V%q62gLvY diff --git a/examples/more/11_billion_lognormals_paralell/example b/examples/more/11_billion_lognormals_paralell/example index 8065041c11e7086585ac2de19e804f39d85da0b1..6584d76f750f8db494b0a80a071c77990c1b3d2e 100755 GIT binary patch delta 7252 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 diff --git a/examples/more/12_time_to_botec_parallel/example b/examples/more/12_time_to_botec_parallel/example index 09b5a240142f889dd3a3bc2fa32f97787d2e3eb8..6faf293502cd768ba815067c423632f548b5d2ee 100755 GIT binary patch delta 7589 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 UJA!H7mPw(1QddqQrZ?^X0XZj_^#A|> delta 11095 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 bAIu4ekZ*MUqshdFruxUVN{vx4a_s*D%QhSg diff --git a/examples/more/13_parallelize_min/example b/examples/more/13_parallelize_min/example index 155af9dbec7017596317b1aead56d8f02f8b5d20..b63cdc058c54a44436c1b540af2091450fc64614 100755 GIT binary patch delta 7459 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 diff --git a/examples/more/14_check_confidence_interval/example b/examples/more/14_check_confidence_interval/example index 3f880bd2f40c1a524c8a98243d9c36f99091f2a2..0d584dcd4b9a0d070cb81de9b6193ab207ffd5e1 100755 GIT binary patch delta 7299 zcmZ`;3wTu3wLa%e1}1@I9+}C^X)j+MRA85RrJ9M%RPOkt-U?RLw~$6{Yl}2%vZO)ma+ZaHrlB3IFsRs`D17yQG`2e z!BK^yxqEA;Oq|qGQds6PRyKhp_7L6r{fxso|k08&F~x>q_jPo(HlF7|V(e zzwn40WF?j>L!TK|=hUPrqEEpM0U1#2gPaPSYLOKz z;!2Jrphtr%lS{%Q8azR+Dn0u&xJ`o(XmFNEnSvbW3dlu0Sc+Vfo<60*P)Hd3AdS)B zEH5fmX>e(YCl$30S4^>A zgC|Lr@*||d?Hc@u26t%iaElTb7G`Jn!J1_;KQRr@n8|Ver$X(581`@eU&A4(f>?TE z2FLY_**9l&=bPs9K@?X2F=o_o+*ii*8<2m74NEI;i;|y;k{^$fS4GJyqU2VM9AphP zX#ghAiIS&B$&;hx$|$)sN*);{XMZctlSZ8OEg;FZC^P;psKYu>_)R{Ywz`F9@=3HlB&6iiGFz^2 z!%IK4jS$Xy=?}L56!N^(l(b9OnnyR2yut%{lxrU$OwFTO`&nV3hw>d>q1+>Z$sXG1 zcs6b)2H9_Hj^CL}Hs?aYnoEy4bA_*R=q0CHIFUmKoqw=-SpEA8!Ug zZ&uW(a+YL<}hrnRZrg3(Pcr+%50F@jZ}e~LAIIg8`k zjGp&UMu+CVji25=g8nDXC;T&udehQ{Ut|%VJ}YAZ4AJ9Sx2fOQa4<3r(L@&{(Uex1 zMUSRW62h6ZFa1E;_)N)kxI0pEOB69D)RCI>nVH?&GXA6!#-(*n8{yLpn}uDyION|} z+Lhe>bk1cyZXp2pExqZa4W1lfn1f#N_=SUZy5iYk5wQ<^W!z-D*C`o|yy&23^D>27 zN%Y&i0^wB$^+5V{5^R$x&D)Yv2m2|V1D*Z-M(<%ZG9xw~cu)J-PCxgi2?I9T=bb>m znv|IIyU#?idh>05Q)%_K$#-fyzw&PzdDuorC%J?lT%^89DQQ2(!4yfoD2fX){hox- zRNYwJRNZ{30aYpD&9;0D@2q>d*v42Ze@mi_{7l0c?1BjK=QN=pM|e7kR_1$!C#|$A zzx)TW*QF>fahp0nukHLyij%9~Sa2(HbwG))fqATkXDq5shu~KKHQL7VIAJ4mfmi5F zq{;%1@Ul(vyEPGhOLdNjh5k|C%pUlc*2`2>l$vlbH^XH&XRVT(OBTt^n^wsUS>UFq z+5_t)ZeJu>c7x)#-NeL2H#xNdn9h&S!U4g$I~5~F4=*Ru&5=36O*4%s99{C%|A}Jf zm$jW2r7rj)tFCEfPvld`{>@(){=&{}%!uh0>MX3}bLek{GlXZ(lf7uE@C#G-6GiE~ z@VJro_+|(rjdacD88->%+kSScBWF`lj=bF?iZx@GxUKv1fF5AC8sp?JeC9%19GYA# zN{vKb?4kPNQK_wx`OQ_4n$CV0eSw>aq%RIdrqV0Lg_g@7OJPi#jRO;*%hs9blj4~v zpPvKlHx`82j8{JbUV1uS(pUBxX?jVau*XP`mpCTcu`wQC9eGP0S>--7fJ4f^P?> zvJS@ntsC8@s2uD(E#)BDgE)INaWRA6K!7O;N(&&4k{e7bf=Ro?G@hdS$B*#NtKC+)3}-;~+$o(WtLIGV{HD6T zy7Sf?q^=S0?ApBBZ1qNFp6G6=nWg_p-QmpawgMNI-G;Y{h1uRhFC>X^*^4V&-1+CW zaMW98P4p>xIF5aa0JtT!oiUjzAOTZ8Nc6bB|3_@^iaP!1gx#Vz1r@ZI39uqd)=69)G) z{V`GO1NR*l#Te{4Rqu(S3;cEP(cnGri((zP>7*zw2e118{=mZs@_&Q-&WPd}@DA`> z0$wG0P)OCm@T@5Mz;}SxfSa(nG%y@HLpyj!uPBC?{=6s-kAb5L(1Wl1R1~|wJ8%kx z!FS+<8UQy%V24+i-Qa%k9bbrI2Y3iep1rwLVLM(r1ao~i3LOC0R{lJA0Q`0E5cm;r z-+(BZhSJ{poV1R2MX?B$T+LAF)xnM8X#58Lf#A`V`Vl2Qgi-re!CnB`@$&$$L)cVe zwSJ6W;3!R;QlAmGb1Dg(T_YEM(!+;m~%X?l8Y`hq`Ufwn5% zS-)9I9a!9~e~cLB09FHRorFLJF97yBuyL$ST^gU@nxDX4@BHis-TNQWow-wm{byor;`gy;#enAk;=MH z=(&cHA@wL4F4ED4^+VoAasTHuV}5hc3ZwDJYxt@t&O@1dB*C>9ePMV#a0l`ojV}it z06vG=`x9J(Kf%E4e+axwwP%sMC&5qyd>8OO;H}L5o&?jg!juHZcHQIz*EY&+92t87 zdIyegeRuD$6kV+PIl)KQ8)sSuDp)PNs>uu=A80{Sy1+Hj`ldpDDg9Sd1|Ot%nu;tA z<&6*VlW2gaxaM?o7xqI&LuJN=X>9XM-bJ0w8A1dTv$;($G|?ME5_wv>=u}HFAE3Cv zXK;NjV0T8;YD#U!bolDxqRd5hK8&YLH;n6|S&Q!FJLnBaMs5eVJ=mkX?rJKcrkPU* zbTKJZXr)Nb2E#5jz#fGX{@wIdOMbo^T_e_{z~Qq~I$te;H*fex8?bj=BYNX&1_7;k%*!qf)nzZB8J)QuipsS?~2% zl#-QpK434lB8F@%VV7jiNxL(O>A+d^qGOxSYVm&dEM2J7t;&<@4prJ(2K@W_76k5M zeQ<7hok1Zns^kIhdLX1@9Oo;~TKOGg^

    Yb;No>*q*SF^VGE$mskTd~}o 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 diff --git a/examples/more/makefile b/examples/more/makefile index 14d7ac2..0bcbde1 100644 --- a/examples/more/makefile +++ b/examples/more/makefile @@ -39,8 +39,6 @@ FORMATTER=clang-format -i -style=$(STYLE_BLUEPRINT) ## make all all: $(CC) $(OPTIMIZED) $(DEBUG) $(WARN) 00_example_template/$(SRC) $(DEPS) -o 00_example_template/$(OUTPUT) - $(CC) $(OPTIMIZED) $(DEBUG) $(WARN) 01_sample_from_cdf/$(SRC) $(DEPS) -o 01_sample_from_cdf/$(OUTPUT) - $(CC) $(OPTIMIZED) $(DEBUG) $(WARN) 02_sample_from_cdf_beta/$(SRC) $(DEPS) -o 02_sample_from_cdf_beta/$(OUTPUT) $(CC) $(OPTIMIZED) $(DEBUG) $(WARN) 03_ci_beta/$(SRC) $(DEPS) -o 03_ci_beta/$(OUTPUT) $(CC) $(OPTIMIZED) $(DEBUG) $(WARN) 04_nuclear_war/$(SRC) $(DEPS) -o 04_nuclear_war/$(OUTPUT) $(CC) $(OPTIMIZED) $(DEBUG) $(WARN) 05_burn_10kg_fat/$(SRC) $(DEPS) -o 05_burn_10kg_fat/$(OUTPUT) diff --git a/squiggle_more.c b/squiggle_more.c index 06781af..1168845 100644 --- a/squiggle_more.c +++ b/squiggle_more.c @@ -212,15 +212,15 @@ void array_print_stats(double xs[], int n){ double median = array_get_median(xs, n); double mean = array_mean(xs, n); double std = array_std(xs, n); - printf("Mean: %lf\n" - " Std: %lf\n" - " 5%%: %lf\n" - " 10%%: %lf\n" - " 25%%: %lf\n" - " 50%%: %lf\n" - " 75%%: %lf\n" - " 90%%: %lf\n" - " 95%%: %lf\n", + printf("Avg: %lf\n" + "Std: %lf\n" + " 5%%: %lf\n" + "10%%: %lf\n" + "25%%: %lf\n" + "50%%: %lf\n" + "75%%: %lf\n" + "90%%: %lf\n" + "95%%: %lf\n", mean, std, ci_90.low, ci_80.low, ci_50.low, median, ci_50.high, ci_80.high, ci_90.high); } @@ -293,7 +293,7 @@ void array_print_histogram(double* xs, int n_samples, int n_bins) { decimalPlaces = -magnitude; decimalPlaces = decimalPlaces > 10 ? 10 : decimalPlaces; } - printf(" [%*.*f, %*.*f", 4+decimalPlaces, decimalPlaces, bin_start, 4+decimalPlaces, decimalPlaces, bin_end); + printf("[%*.*f, %*.*f", 4+decimalPlaces, decimalPlaces, bin_start, 4+decimalPlaces, decimalPlaces, bin_end); char interval_delimiter = ')'; if(i == (n_bins-1)){ interval_delimiter = ']'; // last bucket is inclusive @@ -377,12 +377,12 @@ void array_print_90_ci_histogram(double* xs, int n_samples, int n_bins){ decimalPlaces = -magnitude; decimalPlaces = decimalPlaces > 10 ? 10 : decimalPlaces; } - printf( " (-∞, %*.*f): %d\n", 4+decimalPlaces, decimalPlaces, min_value, below_min); + printf( "(-∞, %*.*f): %d\n", 4+decimalPlaces, decimalPlaces, min_value, below_min); for (int i = 0; i < n_bins; i++) { double bin_start = min_value + i * bin_width; double bin_end = bin_start + bin_width; - printf(" [%*.*f, %*.*f", 4+decimalPlaces, decimalPlaces, bin_start, 4+decimalPlaces, decimalPlaces, bin_end); + printf("[%*.*f, %*.*f", 4+decimalPlaces, decimalPlaces, bin_start, 4+decimalPlaces, decimalPlaces, bin_end); char interval_delimiter = ')'; if(i == (n_bins-1)){ interval_delimiter = ']'; // last bucket is inclusive @@ -395,7 +395,7 @@ void array_print_90_ci_histogram(double* xs, int n_samples, int n_bins){ } printf(" %d\n", bins[i]); } - printf( " (%*.*f, +∞): %d\n", 4+decimalPlaces, decimalPlaces, max_value, above_max); + printf( "(%*.*f, +∞): %d\n", 4+decimalPlaces, decimalPlaces, max_value, above_max); // Free the allocated memory for bins free(bins); diff --git a/squiggle_more.h b/squiggle_more.h index fa9ef43..54afcde 100644 --- a/squiggle_more.h +++ b/squiggle_more.h @@ -17,10 +17,6 @@ void array_print_stats(double xs[], int n); void array_print_histogram(double* xs, int n_samples, int n_bins); void array_print_90_ci_histogram(double* xs, int n, int n_bins); -// Deprecated: get confidence intervals directly from samplers -ci sampler_get_ci(ci interval, double (*sampler)(uint64_t*), int n, uint64_t* seed); -ci sampler_get_90_ci(double (*sampler)(uint64_t*), int n, uint64_t* seed); - /* Algebra manipulations */ typedef struct normal_params_t { @@ -38,24 +34,9 @@ lognormal_params algebra_product_lognormals(lognormal_params a, lognormal_params lognormal_params convert_ci_to_lognormal_params(ci x); ci convert_lognormal_params_to_ci(lognormal_params y); -/* Error handling */ -typedef struct box_t { - int empty; - double content; - char* error_msg; -} box; -#define MAX_ERROR_LENGTH 500 -#define EXIT_ON_ERROR 0 -#define PROCESS_ERROR(error_msg) process_error(error_msg, EXIT_ON_ERROR, __FILE__, __LINE__) -box process_error(const char* error_msg, int should_exit, char* file, int line); -void array_print(double* array, int length); +/* Utilities */ -/* Inverse cdf */ -box inverse_cdf_double(double cdf(double), double p); -box inverse_cdf_box(box cdf_box(double), double p); - -/* Samplers from cdf */ -box sampler_cdf_double(double cdf(double), uint64_t* seed); -box sampler_cdf_box(box cdf(double), uint64_t* seed); +#define THOUSAND 1000 +#define MILLION 1000000 #endif