clean up compilation of C example
This commit is contained in:
parent
eaf1915bdb
commit
f0493f6955
|
@ -1,15 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
root="$1"
|
|
||||||
gcc -std=c99 -Wall -lm "$root".c -o "$root" -I/usr/local/include -L/usr/local/lib -lgsl -lgslcblas -lm -g
|
|
||||||
|
|
||||||
# Link libraries, for good measure
|
|
||||||
LD_LIBRARY_PATH=/usr/local/lib
|
|
||||||
export LD_LIBRARY_PATH
|
|
||||||
|
|
||||||
# Increase stack size limit
|
|
||||||
ulimit -Ss 256000
|
|
||||||
# -Ss: the soft limit. If you set the hard limit, you then can't raise it
|
|
||||||
# 256000: around 250Mbs, if I'm reading it correctly.
|
|
||||||
|
|
||||||
# run
|
|
||||||
./samples
|
|
|
@ -1,13 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
root="$1"
|
|
||||||
gcc -std=c99 -Wall -lm "$root".c -o "$root" -I/usr/local/include -L/usr/local/lib -lgsl -lgslcblas -lm -g
|
|
||||||
|
|
||||||
# Link libraries, for good measure
|
|
||||||
LD_LIBRARY_PATH=/usr/local/lib
|
|
||||||
export LD_LIBRARY_PATH
|
|
||||||
|
|
||||||
# Increase stack size limit
|
|
||||||
ulimit -Ss 256000
|
|
||||||
# -Ss: the soft limit. If you set the hard limit, you then can't raise it
|
|
||||||
# 256000: around 250Mbs, if I'm reading it correctly.
|
|
||||||
|
|
50
C/samples/makefile
Normal file
50
C/samples/makefile
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
# Interface:
|
||||||
|
# make
|
||||||
|
# make build
|
||||||
|
# make format
|
||||||
|
# make run
|
||||||
|
|
||||||
|
# Compiler
|
||||||
|
CC=gcc
|
||||||
|
# CC=tcc # <= faster compilation
|
||||||
|
|
||||||
|
# Main file
|
||||||
|
SRC=samples.c
|
||||||
|
OUTPUT=samples
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
DEPS='gsl'
|
||||||
|
|
||||||
|
## Flags
|
||||||
|
INCS=`pkg-config --cflags ${DEPS}`
|
||||||
|
LIBS=`pkg-config --libs ${DEPS}`
|
||||||
|
DEBUG= #'-g'
|
||||||
|
STANDARD=-std=c99
|
||||||
|
WARNINGS=-Wall
|
||||||
|
|
||||||
|
## Formatter
|
||||||
|
STYLE_BLUEPRINT=webkit
|
||||||
|
FORMATTER=clang-format -i -style=$(STYLE_BLUEPRINT)
|
||||||
|
|
||||||
|
## make build
|
||||||
|
build: $(SRC)
|
||||||
|
$(CC) $(DEBUG) $(INCS) $(PLUGS) $(SRC) -o samples $(LIBS)
|
||||||
|
|
||||||
|
format: $(SRC)
|
||||||
|
$(FORMATTER) $(SRC)
|
||||||
|
|
||||||
|
run: $(SRC) $(OUTPUT)
|
||||||
|
echo "Increasing stack size limit, because we are dealing with 1M samples"
|
||||||
|
ulimit -Ss 256000
|
||||||
|
# ^ Increase stack size limit
|
||||||
|
# -Ss: the soft limit. If you set the hard limit, you then can't raise it
|
||||||
|
# 256000: around 250Mbs, if I'm reading it correctly.
|
||||||
|
./$(OUTPUT)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Old:
|
||||||
|
# Link libraries, for good measure
|
||||||
|
# LD_LIBRARY_PATH=/usr/local/lib
|
||||||
|
# export LD_LIBRARY_PATH
|
||||||
|
|
Binary file not shown.
35
C/samples/samples.c
Executable file → Normal file
35
C/samples/samples.c
Executable file → Normal file
|
@ -1,8 +1,8 @@
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <math.h>
|
|
||||||
#include <gsl/gsl_rng.h>
|
|
||||||
#include <gsl/gsl_randist.h>
|
#include <gsl/gsl_randist.h>
|
||||||
|
#include <gsl/gsl_rng.h>
|
||||||
|
#include <math.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
#define N 1000000
|
#define N 1000000
|
||||||
/*
|
/*
|
||||||
|
@ -12,20 +12,23 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Helpers */
|
/* Helpers */
|
||||||
void print(double *ys){
|
void print(double* ys)
|
||||||
|
{
|
||||||
for (int i = 0; i < N; i++) {
|
for (int i = 0; i < N; i++) {
|
||||||
printf("%f\n", ys[i]);
|
printf("%f\n", ys[i]);
|
||||||
}
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void fill(double *ys, float f){
|
void fill(double* ys, float f)
|
||||||
|
{
|
||||||
for (int i = 0; i < N; i++) {
|
for (int i = 0; i < N; i++) {
|
||||||
ys[i] = f;
|
ys[i] = f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
double sum(double *ps, int n){
|
double sum(double* ps, int n)
|
||||||
|
{
|
||||||
double result = 0;
|
double result = 0;
|
||||||
for (int i = 0; i < n; i++) {
|
for (int i = 0; i < n; i++) {
|
||||||
result += ps[i];
|
result += ps[i];
|
||||||
|
@ -33,7 +36,8 @@ double sum(double *ps, int n){
|
||||||
return (result);
|
return (result);
|
||||||
}
|
}
|
||||||
|
|
||||||
void cumsum(double *ps, double *rs, int n){
|
void cumsum(double* ps, double* rs, int n)
|
||||||
|
{
|
||||||
double counter = 0;
|
double counter = 0;
|
||||||
for (int i = 0; i < n; i++) {
|
for (int i = 0; i < n; i++) {
|
||||||
counter += ps[i];
|
counter += ps[i];
|
||||||
|
@ -42,19 +46,22 @@ void cumsum(double *ps, double *rs, int n){
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Distributions*/
|
/* Distributions*/
|
||||||
void normal(gsl_rng * r, double *ys, double mean, double std){
|
void normal(gsl_rng* r, double* ys, double mean, double std)
|
||||||
|
{
|
||||||
for (int i = 0; i < N; i++) {
|
for (int i = 0; i < N; i++) {
|
||||||
ys[i] = mean + gsl_ran_gaussian(r, std);
|
ys[i] = mean + gsl_ran_gaussian(r, std);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void lognormal(gsl_rng * r, double *ys, double zeta, double sigma){
|
void lognormal(gsl_rng* r, double* ys, double zeta, double sigma)
|
||||||
|
{
|
||||||
for (int i = 0; i < N; i++) {
|
for (int i = 0; i < N; i++) {
|
||||||
ys[i] = gsl_ran_lognormal(r, zeta, sigma);
|
ys[i] = gsl_ran_lognormal(r, zeta, sigma);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void to(gsl_rng * r, double *ys, double low, double high){
|
void to(gsl_rng* r, double* ys, double low, double high)
|
||||||
|
{
|
||||||
double normal95confidencePoint = 1.6448536269514722;
|
double normal95confidencePoint = 1.6448536269514722;
|
||||||
double log_low = log(low);
|
double log_low = log(low);
|
||||||
double log_high = log(high);
|
double log_high = log(high);
|
||||||
|
@ -64,7 +71,8 @@ void to(gsl_rng * r, double *ys, double low, double high){
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Mixture of distributions */
|
/* Mixture of distributions */
|
||||||
void mixture(gsl_rng * r, double *dists[], double *weights, int n, double *results){
|
void mixture(gsl_rng* r, double* dists[], double* weights, int n, double* results)
|
||||||
|
{
|
||||||
/* Get cummulative, normalized weights */
|
/* Get cummulative, normalized weights */
|
||||||
double sum_weights = sum(weights, n);
|
double sum_weights = sum(weights, n);
|
||||||
double normalized_weights[n];
|
double normalized_weights[n];
|
||||||
|
@ -101,7 +109,8 @@ void mixture(gsl_rng * r, double *dists[], double *weights, int n, double *resul
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Main */
|
/* Main */
|
||||||
int main(void){
|
int main(void)
|
||||||
|
{
|
||||||
/* Initialize GNU Statistical Library (GSL) stuff */
|
/* Initialize GNU Statistical Library (GSL) stuff */
|
||||||
const gsl_rng_type* T;
|
const gsl_rng_type* T;
|
||||||
gsl_rng* r;
|
gsl_rng* r;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user