From 0de413208032cff22f33bc2686ebb3966e005b9d Mon Sep 17 00:00:00 2001 From: NunoSempere Date: Sat, 18 Nov 2023 21:00:02 +0000 Subject: [PATCH] modify makefiles to make reorg work, change README --- README.md | 67 ++++++++----- examples/01_one_sample/example | Bin 22640 -> 22000 bytes .../02_many_samples_time_to_botec/example | Bin 22640 -> 22000 bytes examples/03_gcc_nested_function/example | Bin 22696 -> 22064 bytes examples/04_sample_from_cdf_simple/example | Bin 26880 -> 22816 bytes examples/04_sample_from_cdf_simple/example.c | 1 + examples/04_sample_from_cdf_simple/makefile | 2 +- examples/05_sample_from_cdf_beta/example | Bin 26864 -> 26896 bytes examples/05_sample_from_cdf_beta/example.c | 1 + examples/05_sample_from_cdf_beta/makefile | 2 +- examples/06_gamma_beta/example | Bin 22544 -> 21856 bytes examples/07_ci_beta/example | Bin 22544 -> 22576 bytes examples/07_ci_beta/example.c | 1 + examples/07_ci_beta/makefile | 2 +- examples/08_nuclear_war/example.c | 1 + examples/08_nuclear_war/makefile | 2 +- examples/09_burn_10kg_fat/example.c | 1 + examples/09_burn_10kg_fat/makefile | 20 ++-- examples/10_nuclear_recovery/example.c | 1 + examples/10_nuclear_recovery/makefile | 20 ++-- examples/11_algebra/example.c | 1 + examples/11_algebra/makefile | 20 ++-- examples/12_algebra_and_conversion/example.c | 1 + examples/12_algebra_and_conversion/makefile | 20 ++-- examples/13_ergonomic_algebra/example.c | 1 + examples/13_ergonomic_algebra/makefile | 20 ++-- examples/14_twitter_thread_example/example.c | 1 + examples/14_twitter_thread_example/makefile | 20 ++-- examples/16_100_lognormal_samples/example | Bin 22496 -> 21808 bytes extra.c | 88 +++++++++--------- extra.h | 5 +- scratchpad/scratchpad | Bin 22504 -> 21816 bytes squiggle.c | 7 +- test/test | Bin 26992 -> 26352 bytes 34 files changed, 180 insertions(+), 125 deletions(-) diff --git a/README.md b/README.md index 9a37ce7..51c0c67 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,6 @@ This library provides some basic building blocks. The recommended strategy is to ### Cdf auxiliary functions -To help with the above core strategy, this library provides convenience functions, which 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. ### Nested functions and compilation with tcc. @@ -60,29 +59,6 @@ GCC has an extension which allows a program to define a function inside another My recommendation would be to use tcc while drawing a small number of samples for fast iteration, and then using gcc for the final version with lots of samples, and possibly with nested functions for ease of reading by others. -### 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 occured, 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 programmes, 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. - ### Guarantees and licensing - I offer no guarantees about stability, correctness, performance, etc. I might, for instance, abandon the version in C and rewrite it in Zig, Nim or Rust. @@ -272,6 +248,49 @@ make tidy It emits one warning about something I already took care of, so by default I've suppressed it. I think this is good news in terms of making me more confident that this simple library is correct :). +### Division between core functions and extraneous expansions + +This library differentiates between core functions, which are pretty tightly scoped, and expansions and convenience functions, which are more meandering. Expansions are in `extra.c` and `extra.h`. To use them, take care to link them: + +``` +// In your C source file +#include "extra.h" +``` + +``` +# When compiling: +gcc -std=c99 -Wall -O3 example.c squiggle.c extra.c -lm -o ./example + +``` + +#### Extra: Cdf auxiliary functions + +I provide some 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. + +#### 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 occured, 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 programmes, 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. + + ## Related projects - [Squiggle](https://www.squiggle-language.com/) diff --git a/examples/01_one_sample/example b/examples/01_one_sample/example index 9c9a4ae62dd96b3f3c6bec7bb7816d4c12971889..d787733fa5d6393296428eb7ec235537d22a588f 100755 GIT binary patch delta 4257 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 GRQ?x(`Nc*6 diff --git a/examples/02_many_samples_time_to_botec/example b/examples/02_many_samples_time_to_botec/example index bb4ba8fa647437a1ab8beb9a199dd78ed1158420..93a714dec01ba37874c36897948b97e0a852437b 100755 GIT binary patch delta 4329 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 Sq7Lj$B_=!ndv(KLz4yP1Fw3a` literal 22640 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

d2SMaZ)zLwsLEq_hHLH#ix)Aq9S3BEQUG}-#^ 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 b`5aC(#g80U($aDtivJbihbv7Crl#`W%sLye diff --git a/examples/04_sample_from_cdf_simple/example b/examples/04_sample_from_cdf_simple/example index 40d44cf06d4369687b700d5dbc7c7aa20ee3bc6c..a8080e2c6b4c184ca40fb5230e9981f34e2dce8a 100755 GIT binary patch delta 5774 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 G+5Z93%OJS` delta 5871 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 spaVy+ls<^}UZ`$-v=l}o! diff --git a/examples/04_sample_from_cdf_simple/example.c b/examples/04_sample_from_cdf_simple/example.c index fc8e219..ee24d34 100644 --- a/examples/04_sample_from_cdf_simple/example.c +++ b/examples/04_sample_from_cdf_simple/example.c @@ -1,4 +1,5 @@ #include "../../squiggle.h" +#include "../../extra.h" #include #include #include diff --git a/examples/04_sample_from_cdf_simple/makefile b/examples/04_sample_from_cdf_simple/makefile index 16b466d..8b512cd 100644 --- a/examples/04_sample_from_cdf_simple/makefile +++ b/examples/04_sample_from_cdf_simple/makefile @@ -9,7 +9,7 @@ CC=gcc # required for nested functions # CC=tcc # <= faster compilation # Main file -SRC=example.c ../../squiggle.c +SRC=example.c ../../squiggle.c ../../extra.c OUTPUT=./example ## Dependencies diff --git a/examples/05_sample_from_cdf_beta/example b/examples/05_sample_from_cdf_beta/example index 4d138455e4fc3a665906ad66cb6f575450bfffe7..0c0a0ca23267344bb85228aba7e9f93ca37441bf 100755 GIT binary patch delta 3207 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 bA9ilYHT6{K%p5qjVTNgZNMEHuV6FQ<0w`k3 diff --git a/examples/05_sample_from_cdf_beta/example.c b/examples/05_sample_from_cdf_beta/example.c index bd7d28a..3ee1ab3 100644 --- a/examples/05_sample_from_cdf_beta/example.c +++ b/examples/05_sample_from_cdf_beta/example.c @@ -1,4 +1,5 @@ #include "../../squiggle.h" +#include "../../extra.h" #include #include #include diff --git a/examples/05_sample_from_cdf_beta/makefile b/examples/05_sample_from_cdf_beta/makefile index ab7ceae..a41df3c 100644 --- a/examples/05_sample_from_cdf_beta/makefile +++ b/examples/05_sample_from_cdf_beta/makefile @@ -9,7 +9,7 @@ # CC=tcc # <= faster compilation # Main file -SRC=example.c ../../squiggle.c +SRC=example.c ../../squiggle.c ../../extra.c OUTPUT=./example ## Dependencies diff --git a/examples/06_gamma_beta/example b/examples/06_gamma_beta/example index 5ea6a71ced341845be27658aa2b6036f977f40ba..0aa2d726e22486a7e9c304cbb134dff37224cb07 100755 GIT binary patch delta 4267 zcmZ`+3s6+&75?wtUD#cLeS6tmm*uTu1eTZDxVj4{3xa}xVoMYnF`N1T5nq`$XnX`> zh`@0&v@_{o#-?gB2}mEtNh?-ONZXmv)^=>Bu^1n-S|5PMQXjcJ|GoEja5FtSyWctA zfByeJ_niN6x3iBMInH&)nvE7BiBAU7Th^8Kp8lv-Hjiq%zDU=fSA5P}z|5uld(?6x zLt>O|4j}@+HD1}SDSH-A^0GY$yE(xWRJ?+UR}hYIpC=Aw%0A(EPNvB@0zcuGCj7rC zjw(|e1)XY*b>dQEb9?zWTz>7o8;-WWG#uQ}vJHNynqi{>vuFv~Esbr2k5tpS-+)Jx z0mB7qcusAF8g(qRsWZDZu`sO8`FB#NjjB2k*KTTHuj-Y zGwFqX>@!0bWyeQ&Dt(js=%Gv}L{E9zM#vzTbON;LqM%e46+Jx3*D%npTNW`esIzk2 z#zbw&LPEyHlqHa6Jk^RyG};DtAtCn+aSzenx8Pa(M`8BXFneQ|-4JHK5N20Tvh(PK zWs?YMFAB50VRr5Uu$!H&J)$U{CgxX2;8PO9Y6aTQhxQ^@+xNn4h|*al;|Hi{tbqs$L3HU)#&7*2dF(0&N_p8FO7!=q5dAIr3pL9q3p-$XecpHL$RWU4;^|8n=QH3`*B?cI-(5{ zc!Ss`+TNW{$oPo9dj%=M(9oXZ|qH3W1T1!;mfHx0~knV{nhSuVopJ-;!hdOIA{L%{CZ3x&> zxKCk|t&v*^mu$)UKRgn}al=yO*ZJ2v31Le$49OxR%o%#}22E9|4aK&(I z>O0&o;0+;3?|vwEeBDkv!mtn(8MLGS^AF*Quz`CA%42u(>to@7kffWCU5jFwYs8FL zbbSPg_SDGx*lKY5z!2+)PWyB|Wdc63$MKp8_=i2kvO>TI^9;*t1A~h83Se?9<1RqG zBUxAUA9>^t;Vs9khyzn`(A99-k%|v@-BHZ_7BZd5!mtgu*lWA+Ko~dFMn6OgA5rrV z);p*3-8MMnOyFAK*G_lL8f*%Ue=QIBUAW>*iJmWcucGTx_W*3uQn?#2f7+M4(+W

i;1x+qDhSTXB2CuOFsEbZ`4Nh8F+qPYF< z{_5iPul-g2_Q%zMj@gfA5>i<@^GRUOEp6!Ft%1*Hdw4w5eDq|CS9fQ&!Dyzhm2;|| zr`IDEiPZc{6ekd4M?^6mckT?txri4L%Mk-#iQ)*h&%GjwooELUk0ACSoYe4kjZ7kpyDm`Oow* z+M+4aJ(`SM028vFI-^j3n#3b;CR@-{p*93xqSl1kE%d7Y0jb617$f* z%~i>7V~%sRnm+%(MX^B|O}?vXGS?zU-x8?M*q=kL6S&Bw=do%F&ve(VuB)~67HwBf8mQF=Q3;qReb1%KuQ4}B} z5zxF~X+jfyfk44Su#qC`gv&s(OW^W?m$)GK^DQvQtD$aT4Yc{AU{IF~T3-lf9`gys zCCVst1STq?BW!fWQB)BHd3IrbC zv`PxnJ?ssPIc-;*SaBG?2NjOc>5df?@rQC?ydWKCO(+!X?6sM>{!LP-Yek_@5+45} zX`oobYR7u*#Cq@qFIc+%CW#4`n;FTzBsfu+YR^{8PKWGMg*%su56%<{Ts0&t5)+G zMrBO4oAVi;AkRg2HkAs6&s5@MCs!?OUhFpclpV;qg*rmoI2w)DRwyM~m$_mSn z$0SD-9+#&iY|sxCzFY~89V@4hHxkFU3i65K-)oY`smH`n`J==W*uL1rUBf_y+y}_e zq=c80$7Mm&L6jn~1Js0kJpNmAL{aZ?Fops66Wn#Zm2McWH0nn%&s0W?aI-ScG^&^k`@mC`VP>^tXfs1|Rl1(- zIy~);S1sm-U<~6mRvS(1++cVPJQesP)kbrtN1l$MRt3$~={oiw6Hln>IXZT()xiz4 y*bx! literal 22544 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 DuL;@C diff --git a/examples/07_ci_beta/example b/examples/07_ci_beta/example index ae75202da490694b774402b0ebc1989899e3cc32..6dfa4c9a4080b174649fc1de853285712ec056dc 100755 GIT binary patch delta 3187 zcma)84RBP|6~6Z+OEw94yZK}HZL-;1~+hAngdjPv^4_uk@^&UAWa z_MLmb^PThVJ?GrJZ&MHN>EWAvylr#Y*_8dcOqcz+l)=X)*CZL!nrMi7q^x~IFMIZ$ zkmo(;Dt~cr+t8NfdwPE!eL3M*vb4oP6-}3z&+My_!iR~{A+w8SPR)N*$Fc#ZGYW7ko zZG?KW>-icQ$^M1(r9y9wDM&ec$8h}s?@|;R7&Cg*P6Zxc)9{$(d;zsOUXpe@b?T1W z2DQU^m)hzC^&pLRmLwg8)#eG1#}Sa+w`rHNgrBE=r-y$?F=t7}8xCx#>g2F3-B?%J z3*=QA`Dj|H6s08HG9nL-LFDqJBV!OX?-rd@ilx$9bW>6JD->`QIqWdlUJXl(4cl7M z#$$$kTE^3lT&4UJ?RFLL-_bFbN8Xx^0KfT{5%f*E<|-cjJRqb4FOMCkqMTBxESnzA zIl~{L^4y%{aap?6vXmalb-E_q5T015-AH4sSO@Ix8x+p3J?5idN=z zO1z2Q_3q&-=zIAaIMG-6v!ueybbrC)(xl7Onm?8PQZSCTWcn$wa0-8f9xQC(S803U zhdhB66>Wjv&7!T@v(YAK9ZM=>Ri_#vgKAfGYHDsF;FkZ!yBYn_mscA3 z+Z;7=15Dpy^(TqNKCsnDZIQF8FE;p_Gc%ms{Iq@K(i&})qX#II7M6lQht*lgw6Y?1g&J9KW z8k`e~+z2)WBO`OvuJ2s;GWJ+Q**7BPu^rKWR2C#qI63^LzmX331JvlxN?Ee{`Be+Y zK8bYE3jb`<{L4GkFEy?6S<_ZSAGoS%{m?P!Gtk|`n&wPovses0-hk}%-_*22 z&^034(B05k$k8&~5lztj(9c5qaQVCjy$$+pXy@0O)(5>F+B%A+j6cQ8C~ZP%$0E@d z5L`Emp=EPF*R*2Mz^d$(j;F}hx>RPzG#8lv3r%}Q@F0Tk2i6I!#^C#G_!GVc!N4Lm71dSPgy$fF;uHiIXkYFvMjJ!r;# zLz*T#yAr0!-p<63>|1B4mFdArZi^p1Gny7o%ABua)P$~T79Ky4y-%7cZUw#_xV}P^ zV6D`QPN>&&EYcK)eF*kd!cUd`Fj>X07QgMVHPZ1()2-()T8+D%t_Cur;bcCF0#j9~ zyE3|A>fA)3zX)F9d>?&2ZCvtxcygA-CeqdErOFWzjAb+RVSRA-ahj@X9m;3=JevjX zv0kBtuqL2#9PQUQ>#mzVm`j^sRbb6P?RHigRvZUi%II*dgU=98ceBay;yXb|6Y?r# zF>o*SN}0Tu@@F`BSg@EInr!?ltj~1qPmPDE3=g1K;z<+6~3diyd)I zf7&TMs-_X^)FmHH}S)AE@q1dZ+0azZG3MN8@SU6vJJ-%TKQ~S0uOA8^~qqZJwMw%e*pN IRQ0Im-zZ@<%K!iX delta 3218 zcmbtW3s98T6~6bEmEBc#7g*RAD+?}fkzEB}tu545evlNf_=qJ|lln;1s?}6&ooFOY zvr%U>hbAPA)zM~RXQCw~nVQ(ifRAXEPSB=_)947c(X|>y(BgA$zx)6H*3`^&Cet(U zpL@UaowH}pIrr}0+RC@$FQ3!E@^D|A#{FK5+S^|msHqchZGZp8@pMLOU{ixS| zKI54;U-@Iz-u>r=_s?zX2EAodoNg*iSz>wK%b2<)$?l~cDHp7HR>tg^8xVp%$}Xek zRN{|OzB5M|n?beCAMvB~fiq~GeNTu!`=h2^K3eASq$aHXNuS*j37RFg(Z^WqX>zA6 zRLUGaHoaeB7(cXxEx0grU0*7Tu+PkZ2Tf)1uH<;4_otyMmAYt&`8 zb?P77|Dm?HLES`(J2$ZzR(obST}v-lzPLpz+`0T+YH?@sU($YeZpw!)e64U-pFLU6 zD`_wFy6bp^Dm+2!rvrNAOcx>-Cf-d))T;xu)03kN4A4=J${!(zH|Xk4Lp3&TP#Ej8 zHzqv=8osCLDVplde19kw^5H+R>e)hC8%XEHS?7PS#e|HPs93*V_A3dtrwh*=KQNVuvZY zAa{L{+H^Qj6YZ{OJhVX1CVH%?hfBJ8GNxLNNvC!+p#Ac1VqF)7=(i8MQ_)Zry@!nd z|8$0G`J5b#d_KNSDFr#Lctt(eN{p7-hOXiP!g7$^#X=Z3V-3qN*Z~nUw zL7d7p(Bq)@{6mNaXg9K01U>755YIukpdLG+$6XTQu-sn};s$gK+Bpa#^Mw$l(EFiP z=v&Z@&}*&=v0UQUgxCxnyDr3O=skV#OJKDuhQp>~bPMsgTtjg8 zF(p;(>m;XY47Mv(@w0G(8Rjv8GpVpXrZNL3#SFZXvWUmFGMTWY>LgXS*f&zl+{+7W3pBo$=MH1^Z(#{6Pz>P z1a8onF%y<%pqD$*R&B6<7(g(EIcC*pDDVs($m4|yPerFjw8yqE^0GI#ia zMXv7RpJN>AYX2MmE{dVBp~fUWuqC5mDHyjvv5sMgHOZpu5f?5NJUz7rrw*?cQW_9T zN+V@Wc6ok_HU=1e^Xqgp{#+w{t2Ph~8m7mLAJ{8#JfPzvu$OYzz`OJHeY`J2 z&|6uPUZXGZ3oM)yq-rXOLckH z8rJec-FiS*teNUz-D~8zAw`Ev4C^l1R_UtRYxuH<^64;ehf(49Rn-aH!MtCYuG7?` zy7*a{Egz6ilNskXh2BJ{xr|m+xlFZjc6gq_n``tTUWvs9 z-fFzvPu9b*)pQd6zkoGcewu%`!DEJhy}|pv#I<}5Qn=b>{fog1IB8n-fwr`%KeH$~ zK6z%J6snPV*_#)aXf`e~W} E2DOP #include #include diff --git a/examples/07_ci_beta/makefile b/examples/07_ci_beta/makefile index ef385f7..09f8b3c 100644 --- a/examples/07_ci_beta/makefile +++ b/examples/07_ci_beta/makefile @@ -9,7 +9,7 @@ CC=gcc # CC=tcc # <= faster compilation # Main file -SRC=example.c ../../squiggle.c +SRC=example.c ../../squiggle.c ../../extra.c OUTPUT=example ## Dependencies diff --git a/examples/08_nuclear_war/example.c b/examples/08_nuclear_war/example.c index a17b44f..df5abcb 100644 --- a/examples/08_nuclear_war/example.c +++ b/examples/08_nuclear_war/example.c @@ -1,4 +1,5 @@ #include "../../squiggle.h" +#include "../../extra.h" #include #include #include diff --git a/examples/08_nuclear_war/makefile b/examples/08_nuclear_war/makefile index ef385f7..09f8b3c 100644 --- a/examples/08_nuclear_war/makefile +++ b/examples/08_nuclear_war/makefile @@ -9,7 +9,7 @@ CC=gcc # CC=tcc # <= faster compilation # Main file -SRC=example.c ../../squiggle.c +SRC=example.c ../../squiggle.c ../../extra.c OUTPUT=example ## Dependencies diff --git a/examples/09_burn_10kg_fat/example.c b/examples/09_burn_10kg_fat/example.c index b6dd555..a2b1d18 100644 --- a/examples/09_burn_10kg_fat/example.c +++ b/examples/09_burn_10kg_fat/example.c @@ -1,4 +1,5 @@ #include "../../squiggle.h" +#include "../../extra.h" #include #include #include diff --git a/examples/09_burn_10kg_fat/makefile b/examples/09_burn_10kg_fat/makefile index ef385f7..8b512cd 100644 --- a/examples/09_burn_10kg_fat/makefile +++ b/examples/09_burn_10kg_fat/makefile @@ -5,22 +5,25 @@ # make run # Compiler -CC=gcc +CC=gcc # required for nested functions # CC=tcc # <= faster compilation # Main file -SRC=example.c ../../squiggle.c -OUTPUT=example +SRC=example.c ../../squiggle.c ../../extra.c +OUTPUT=./example ## Dependencies MATH=-lm +DEPENDENCIES=$(MATH) +# OPENMP=-fopenmp ## Flags DEBUG= #'-g' -STANDARD=-std=c99 +STANDARD=-std=c99 ## gnu99 allows for nested functions. +EXTENSIONS= #-fnested-functions WARNINGS=-Wall -OPTIMIZED=-O3 #-Ofast -# OPENMP=-fopenmp +OPTIMIZED=-O3#-Ofast +CFLAGS=$(DEBUG) $(STANDARD) $(EXTENSIONS) $(WARNINGS) $(OPTIMIZED) ## Formatter STYLE_BLUEPRINT=webkit @@ -28,13 +31,14 @@ FORMATTER=clang-format -i -style=$(STYLE_BLUEPRINT) ## make build build: $(SRC) - $(CC) $(OPTIMIZED) $(DEBUG) $(SRC) $(MATH) -o $(OUTPUT) + # gcc -std=gnu99 example.c -lm -o example + $(CC) $(CFLAGS) $(SRC) $(DEPENDENCIES) -o $(OUTPUT) format: $(SRC) $(FORMATTER) $(SRC) run: $(SRC) $(OUTPUT) - OMP_NUM_THREADS=1 ./$(OUTPUT) && echo + ./$(OUTPUT) && echo time-linux: @echo "Requires /bin/time, found on GNU/Linux systems" && echo diff --git a/examples/10_nuclear_recovery/example.c b/examples/10_nuclear_recovery/example.c index 3891cd7..76de52d 100644 --- a/examples/10_nuclear_recovery/example.c +++ b/examples/10_nuclear_recovery/example.c @@ -1,4 +1,5 @@ #include "../../squiggle.h" +#include "../../extra.h" #include #include #include diff --git a/examples/10_nuclear_recovery/makefile b/examples/10_nuclear_recovery/makefile index ef385f7..8b512cd 100644 --- a/examples/10_nuclear_recovery/makefile +++ b/examples/10_nuclear_recovery/makefile @@ -5,22 +5,25 @@ # make run # Compiler -CC=gcc +CC=gcc # required for nested functions # CC=tcc # <= faster compilation # Main file -SRC=example.c ../../squiggle.c -OUTPUT=example +SRC=example.c ../../squiggle.c ../../extra.c +OUTPUT=./example ## Dependencies MATH=-lm +DEPENDENCIES=$(MATH) +# OPENMP=-fopenmp ## Flags DEBUG= #'-g' -STANDARD=-std=c99 +STANDARD=-std=c99 ## gnu99 allows for nested functions. +EXTENSIONS= #-fnested-functions WARNINGS=-Wall -OPTIMIZED=-O3 #-Ofast -# OPENMP=-fopenmp +OPTIMIZED=-O3#-Ofast +CFLAGS=$(DEBUG) $(STANDARD) $(EXTENSIONS) $(WARNINGS) $(OPTIMIZED) ## Formatter STYLE_BLUEPRINT=webkit @@ -28,13 +31,14 @@ FORMATTER=clang-format -i -style=$(STYLE_BLUEPRINT) ## make build build: $(SRC) - $(CC) $(OPTIMIZED) $(DEBUG) $(SRC) $(MATH) -o $(OUTPUT) + # gcc -std=gnu99 example.c -lm -o example + $(CC) $(CFLAGS) $(SRC) $(DEPENDENCIES) -o $(OUTPUT) format: $(SRC) $(FORMATTER) $(SRC) run: $(SRC) $(OUTPUT) - OMP_NUM_THREADS=1 ./$(OUTPUT) && echo + ./$(OUTPUT) && echo time-linux: @echo "Requires /bin/time, found on GNU/Linux systems" && echo diff --git a/examples/11_algebra/example.c b/examples/11_algebra/example.c index b26d0ad..2fde7ff 100644 --- a/examples/11_algebra/example.c +++ b/examples/11_algebra/example.c @@ -1,4 +1,5 @@ #include "../../squiggle.h" +#include "../../extra.h" #include #include #include diff --git a/examples/11_algebra/makefile b/examples/11_algebra/makefile index ef385f7..8b512cd 100644 --- a/examples/11_algebra/makefile +++ b/examples/11_algebra/makefile @@ -5,22 +5,25 @@ # make run # Compiler -CC=gcc +CC=gcc # required for nested functions # CC=tcc # <= faster compilation # Main file -SRC=example.c ../../squiggle.c -OUTPUT=example +SRC=example.c ../../squiggle.c ../../extra.c +OUTPUT=./example ## Dependencies MATH=-lm +DEPENDENCIES=$(MATH) +# OPENMP=-fopenmp ## Flags DEBUG= #'-g' -STANDARD=-std=c99 +STANDARD=-std=c99 ## gnu99 allows for nested functions. +EXTENSIONS= #-fnested-functions WARNINGS=-Wall -OPTIMIZED=-O3 #-Ofast -# OPENMP=-fopenmp +OPTIMIZED=-O3#-Ofast +CFLAGS=$(DEBUG) $(STANDARD) $(EXTENSIONS) $(WARNINGS) $(OPTIMIZED) ## Formatter STYLE_BLUEPRINT=webkit @@ -28,13 +31,14 @@ FORMATTER=clang-format -i -style=$(STYLE_BLUEPRINT) ## make build build: $(SRC) - $(CC) $(OPTIMIZED) $(DEBUG) $(SRC) $(MATH) -o $(OUTPUT) + # gcc -std=gnu99 example.c -lm -o example + $(CC) $(CFLAGS) $(SRC) $(DEPENDENCIES) -o $(OUTPUT) format: $(SRC) $(FORMATTER) $(SRC) run: $(SRC) $(OUTPUT) - OMP_NUM_THREADS=1 ./$(OUTPUT) && echo + ./$(OUTPUT) && echo time-linux: @echo "Requires /bin/time, found on GNU/Linux systems" && echo diff --git a/examples/12_algebra_and_conversion/example.c b/examples/12_algebra_and_conversion/example.c index a93860b..7386270 100644 --- a/examples/12_algebra_and_conversion/example.c +++ b/examples/12_algebra_and_conversion/example.c @@ -1,4 +1,5 @@ #include "../../squiggle.h" +#include "../../extra.h" #include #include #include diff --git a/examples/12_algebra_and_conversion/makefile b/examples/12_algebra_and_conversion/makefile index ef385f7..8b512cd 100644 --- a/examples/12_algebra_and_conversion/makefile +++ b/examples/12_algebra_and_conversion/makefile @@ -5,22 +5,25 @@ # make run # Compiler -CC=gcc +CC=gcc # required for nested functions # CC=tcc # <= faster compilation # Main file -SRC=example.c ../../squiggle.c -OUTPUT=example +SRC=example.c ../../squiggle.c ../../extra.c +OUTPUT=./example ## Dependencies MATH=-lm +DEPENDENCIES=$(MATH) +# OPENMP=-fopenmp ## Flags DEBUG= #'-g' -STANDARD=-std=c99 +STANDARD=-std=c99 ## gnu99 allows for nested functions. +EXTENSIONS= #-fnested-functions WARNINGS=-Wall -OPTIMIZED=-O3 #-Ofast -# OPENMP=-fopenmp +OPTIMIZED=-O3#-Ofast +CFLAGS=$(DEBUG) $(STANDARD) $(EXTENSIONS) $(WARNINGS) $(OPTIMIZED) ## Formatter STYLE_BLUEPRINT=webkit @@ -28,13 +31,14 @@ FORMATTER=clang-format -i -style=$(STYLE_BLUEPRINT) ## make build build: $(SRC) - $(CC) $(OPTIMIZED) $(DEBUG) $(SRC) $(MATH) -o $(OUTPUT) + # gcc -std=gnu99 example.c -lm -o example + $(CC) $(CFLAGS) $(SRC) $(DEPENDENCIES) -o $(OUTPUT) format: $(SRC) $(FORMATTER) $(SRC) run: $(SRC) $(OUTPUT) - OMP_NUM_THREADS=1 ./$(OUTPUT) && echo + ./$(OUTPUT) && echo time-linux: @echo "Requires /bin/time, found on GNU/Linux systems" && echo diff --git a/examples/13_ergonomic_algebra/example.c b/examples/13_ergonomic_algebra/example.c index 250a334..6decb76 100644 --- a/examples/13_ergonomic_algebra/example.c +++ b/examples/13_ergonomic_algebra/example.c @@ -1,4 +1,5 @@ #include "../../squiggle.h" +#include "../../extra.h" #include #include #include diff --git a/examples/13_ergonomic_algebra/makefile b/examples/13_ergonomic_algebra/makefile index ef385f7..8b512cd 100644 --- a/examples/13_ergonomic_algebra/makefile +++ b/examples/13_ergonomic_algebra/makefile @@ -5,22 +5,25 @@ # make run # Compiler -CC=gcc +CC=gcc # required for nested functions # CC=tcc # <= faster compilation # Main file -SRC=example.c ../../squiggle.c -OUTPUT=example +SRC=example.c ../../squiggle.c ../../extra.c +OUTPUT=./example ## Dependencies MATH=-lm +DEPENDENCIES=$(MATH) +# OPENMP=-fopenmp ## Flags DEBUG= #'-g' -STANDARD=-std=c99 +STANDARD=-std=c99 ## gnu99 allows for nested functions. +EXTENSIONS= #-fnested-functions WARNINGS=-Wall -OPTIMIZED=-O3 #-Ofast -# OPENMP=-fopenmp +OPTIMIZED=-O3#-Ofast +CFLAGS=$(DEBUG) $(STANDARD) $(EXTENSIONS) $(WARNINGS) $(OPTIMIZED) ## Formatter STYLE_BLUEPRINT=webkit @@ -28,13 +31,14 @@ FORMATTER=clang-format -i -style=$(STYLE_BLUEPRINT) ## make build build: $(SRC) - $(CC) $(OPTIMIZED) $(DEBUG) $(SRC) $(MATH) -o $(OUTPUT) + # gcc -std=gnu99 example.c -lm -o example + $(CC) $(CFLAGS) $(SRC) $(DEPENDENCIES) -o $(OUTPUT) format: $(SRC) $(FORMATTER) $(SRC) run: $(SRC) $(OUTPUT) - OMP_NUM_THREADS=1 ./$(OUTPUT) && echo + ./$(OUTPUT) && echo time-linux: @echo "Requires /bin/time, found on GNU/Linux systems" && echo diff --git a/examples/14_twitter_thread_example/example.c b/examples/14_twitter_thread_example/example.c index d5a4d41..81e836d 100644 --- a/examples/14_twitter_thread_example/example.c +++ b/examples/14_twitter_thread_example/example.c @@ -1,4 +1,5 @@ #include "../../squiggle.h" +#include "../../extra.h" #include #include #include diff --git a/examples/14_twitter_thread_example/makefile b/examples/14_twitter_thread_example/makefile index 2d251e0..8b512cd 100644 --- a/examples/14_twitter_thread_example/makefile +++ b/examples/14_twitter_thread_example/makefile @@ -5,22 +5,25 @@ # make run # Compiler -CC=gcc +CC=gcc # required for nested functions # CC=tcc # <= faster compilation # Main file -SRC=example.c ../../squiggle.c -OUTPUT=example +SRC=example.c ../../squiggle.c ../../extra.c +OUTPUT=./example ## Dependencies MATH=-lm +DEPENDENCIES=$(MATH) +# OPENMP=-fopenmp ## Flags DEBUG= #'-g' -STANDARD=-std=c99 +STANDARD=-std=c99 ## gnu99 allows for nested functions. +EXTENSIONS= #-fnested-functions WARNINGS=-Wall -OPTIMIZED=-O3 #-Ofast -# OPENMP=-fopenmp +OPTIMIZED=-O3#-Ofast +CFLAGS=$(DEBUG) $(STANDARD) $(EXTENSIONS) $(WARNINGS) $(OPTIMIZED) ## Formatter STYLE_BLUEPRINT=webkit @@ -28,7 +31,8 @@ FORMATTER=clang-format -i -style=$(STYLE_BLUEPRINT) ## make build build: $(SRC) - $(CC) $(OPTIMIZED) $(DEBUG) $(SRC) $(MATH) -o $(OUTPUT) + # gcc -std=gnu99 example.c -lm -o example + $(CC) $(CFLAGS) $(SRC) $(DEPENDENCIES) -o $(OUTPUT) format: $(SRC) $(FORMATTER) $(SRC) @@ -40,7 +44,7 @@ time-linux: @echo "Requires /bin/time, found on GNU/Linux systems" && echo @echo "Running 100x and taking avg time $(OUTPUT)" - @t=$$(/usr/bin/time -f "%e" -p bash -c 'for i in {1..100}; do ./$(OUTPUT); done' 2>&1 >/dev/null | grep real | awk '{print $$2}' ); echo "scale=2; 1000 * $$t / 100" | bc | sed "s|^|Time using 1 thread: |" | sed 's|$$|ms|' && echo + @t=$$(/usr/bin/time -f "%e" -p bash -c 'for i in {1..100}; do $(OUTPUT); done' 2>&1 >/dev/null | grep real | awk '{print $$2}' ); echo "scale=2; 1000 * $$t / 100" | bc | sed "s|^|Time using 1 thread: |" | sed 's|$$|ms|' && echo ## Profiling diff --git a/examples/16_100_lognormal_samples/example b/examples/16_100_lognormal_samples/example index 3773262e2e3ace9ad8c6a0faa5a5d5e7bd79fb8e..5aae3a0ffe678f6cd954069faf97880ac68ff0ef 100755 GIT binary patch delta 3962 zcmZ`+eRNdC6`y&VO?H<}_9Gu}Hze6j2mym83jwqTH|{2ZEFYnpkVxo(3Y9Mr%pyTP zj+R6!CB@Xhm5R35^bhKhwi1n}1$wNZP#dbP+tX9)u@nPUyI7ErO3RnN{^q?mJuz)( z&wIbQzkBD-%$=D#Z-g1{?VOk|js|3Bs-!5ql88&0_ltHsojGj{# z7XQC4dd)6+$!@tXC-SH5AN{T*{-);-u`_u+^M3UC$w{Z^QOo397re>QGS;d4cF{4* zBz}a>SyXbT`6z-Xkrtv9@F*~3_3g8UXegdW3#@hg+qBpEeENnJ>({s4Ps`IAcT`nO zhab_u1-~@CX2m<5S;1MsnPWrG7QJ^7wg{fh`48BI#jB_b?wfnRgD|GC0aNbMWea-~ zvM3y$5DwecFD-=j^;?j)z(nVB4Ao7KP3{#1H@huz8dxl3$K_b@i1OP8Qz5bfvcriWXpORh$)6`e#`~EV%nBMTu<*$)D zzf|qZ!+v|b19@P?wKVfEB+SrynC9nC;t$iN{1RnS9zBy^RXUHEk>8qrfMDDPS+K^{<-tDscA)nwA7!1AYL!>myAQIehEiG_3&WyP#M4QG4sil(&!?;1hJ7P>LDjQ3IT zG}StI77i#pZNk(z<|5NPhRm>JtQ}7bd@oRzQdFMAlcc@VChf3chPRn2(RvV1=@{+| zxCpqfnRYk@Y#7h?z)i$#Su884oOWc{>c{DKiW6KPBJ|)Wdl6kHq9vjW`;hWJ?B|Xv zW5U_pAVUb<7$plr*9u)TZLA7dA4M%m`>Uqx_%UkiV@;b4V6(H_yOjE@;DcH2XqJr? zfO-r15cG|s^;-kD4>GR$aRb&2!5~ zm(zvnH9SF$_pG7aQ73iSOUV{V!SR)d3T<&T*J5XJpvnh?ls1laWKdId4o^}ilrA=; zqnmZm%TRmRff70&t>CTXsZssGsYd6c-xijONknT@Od?v7Yf)K(HbP2JSItxYp!r21 zTZo`42zQ*O)~bq#No~bc`MDvDwwOjTbdukR3fH@Pv9?}uPN$LD3iMiBr~2i`qBQ-Z zUJ)Z}tW)R7k4CAzsXOv98Dq(>M6eZxPZ)iVNR}}VwvZQOPYJzJS5{bMiV1TOn{ie} ziGUB%%eYcL7B#WPaYG~DOR00V%I~KWbt?7EwngP`korxg=cLG2Cm@|elTk?Td# z&kk^p@Z|rlsqI6~6-7U$z?X!Uzb@W0&Pp463Wzex^qc~^|HnwLg4gH5(}>rrD?A8| z2SH#Vqdh(`^b!OwLNi=w$nr$pA^Cv8-ws)nyG`D0j#Z|kdiuc}l@fDoo?wY#DbMRV zUDG=!Jq-(xM>p!rc6?$^M*c^sG+MByOy@)9u9ME6Gx?A?d3nSSfp@cf<{q<5FPruq z=6|5|rvIPnJfj!pcyM4a;2Gz@cohGCdAMYH7!rvYMP|oa;PtRlPrYx(WNaJ}ybd#X za>~<8J}L4Wik|v_)!<9?4fYk&B51bMlOHS|puP2~eVeI`^cT+yaoR9{7M-21s+(49 zNUUFVUwa!fYY(+Oj6W*0ZNV!vtD%V68)i7RwmrOQ?E|aZtESO#LyYDvT-N`yg)j2{ z`{FA&@1PTnm7bVYj0uU|#Pie{4^Xhl?I}0^8%PXNw5ie)H(7}Z>TIfX445nu*zu;B z|H*4IzaiZzi@uI~uX9nQBWa$;q??W}n&}xbMTxz{n=8F?u_WetsHVBXA&(dm+4kl+ zNMt9PD?KtHNIXTn5mRV!du57~IIK`jONCwjQ(8{jTJE&VgoU&XN#>peU2nP5BXddu m|0zW2q3FGuvfD;Ai)T6pV+Pr6p~n}`w6};$1tp(&Q{dmu|BOTc literal 22496 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 NO8DXG1crpB^1nx`NFo3L diff --git a/extra.c b/extra.c index 8d134ee..4d7e412 100644 --- a/extra.c +++ b/extra.c @@ -6,15 +6,58 @@ #include #include #include +#include "squiggle.h" + +// math constants +#define PI 3.14159265358979323846 // M_PI in gcc gnu99 +#define NORMAL90CONFIDENCE 1.6448536269514727 // Some error niceties; these won't be used until later #define MAX_ERROR_LENGTH 500 #define EXIT_ON_ERROR 0 #define PROCESS_ERROR(error_msg) process_error(error_msg, EXIT_ON_ERROR, __FILE__, __LINE__) -// # More cool stuff -// This is no longer necessary to do basic estimation, -// but is still cool +// Get confidence intervals, given a sampler +// Not in core yet because I'm not sure how much I like the interface, +// to do: add n to function parameters and document + +typedef struct ci_t { + float low; + float high; +} ci; +int compare_doubles(const void* p, const void* q) +{ + // https://wikiless.esmailelbob.xyz/wiki/Qsort?lang=en + double x = *(const double*)p; + double y = *(const double*)q; + + /* Avoid return x - y, which can cause undefined behaviour + because of signed integer overflow. */ + if (x < y) + return -1; // Return -1 if you want ascending, 1 if you want descending order. + else if (x > y) + return 1; // Return 1 if you want ascending, -1 if you want descending order. + + return 0; +} +ci get_90_confidence_interval(double (*sampler)(uint64_t*), uint64_t* seed) +{ + int n = 100 * 1000; + double* samples_array = malloc(n * sizeof(double)); + for (int i = 0; i < n; i++) { + samples_array[i] = sampler(seed); + } + qsort(samples_array, n, sizeof(double), compare_doubles); + + ci result = { + .low = samples_array[5000], + .high = samples_array[94999], + }; + free(samples_array); + + return result; +} + // ## Sample from an arbitrary cdf struct box { @@ -210,45 +253,6 @@ double sampler_danger(struct box cdf(double), uint64_t* seed) } */ -// Get confidence intervals, given a sampler - -typedef struct ci_t { - float low; - float high; -} ci; -int compare_doubles(const void* p, const void* q) -{ - // https://wikiless.esmailelbob.xyz/wiki/Qsort?lang=en - double x = *(const double*)p; - double y = *(const double*)q; - - /* Avoid return x - y, which can cause undefined behaviour - because of signed integer overflow. */ - if (x < y) - return -1; // Return -1 if you want ascending, 1 if you want descending order. - else if (x > y) - return 1; // Return 1 if you want ascending, -1 if you want descending order. - - return 0; -} -ci get_90_confidence_interval(double (*sampler)(uint64_t*), uint64_t* seed) -{ - int n = 100 * 1000; - double* samples_array = malloc(n * sizeof(double)); - for (int i = 0; i < n; i++) { - samples_array[i] = sampler(seed); - } - qsort(samples_array, n, sizeof(double), compare_doubles); - - ci result = { - .low = samples_array[5000], - .high = samples_array[94999], - }; - free(samples_array); - - return result; -} - // # Small algebra manipulations // here I discover named structs, diff --git a/extra.h b/extra.h index becf562..b71ae4f 100644 --- a/extra.h +++ b/extra.h @@ -43,10 +43,7 @@ typedef struct lognormal_params_t { } lognormal_params; lognormal_params algebra_product_lognormals(lognormal_params a, lognormal_params b); - lognormal_params convert_ci_to_lognormal_params(ci x); - - -ci convert_lognormal_params_to_ci(lognormal_params y); +ci convert_lognormal_params_to_ci(lognormal_params y); #endif diff --git a/scratchpad/scratchpad b/scratchpad/scratchpad index 2c89a473361a0a745463eb4257e488947832f16a..434102f43c0cba5a119a25a5aef28e7a1ae3c29c 100755 GIT binary patch delta 4006 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 diff --git a/squiggle.c b/squiggle.c index 23e87fc..9177e97 100644 --- a/squiggle.c +++ b/squiggle.c @@ -7,13 +7,14 @@ #include #include -#define PI 3.14159265358979323846 // M_PI in gcc gnu99 -#define NORMAL90CONFIDENCE 1.6448536269514727 - // # Key functionality // Define the minimum number of functions needed to do simple estimation // Starts here, ends until the end of the mixture function +// math constants +#define PI 3.14159265358979323846 // M_PI in gcc gnu99 +#define NORMAL90CONFIDENCE 1.6448536269514727 + // Pseudo Random number generator uint64_t xorshift32(uint32_t* seed) { diff --git a/test/test b/test/test index 38c233622051b0b6240eba387cfbdae11e40ea05..594b53f8527f8b2ac442f43f072b996b38b582d8 100755 GIT binary patch delta 6150 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 R^ZL8==2a4Fr=B&A{|9iZc834} delta 10151 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 q>h2EQUtIH)5#6MyPS*8?lVZ