tools.cpp

2
tools.cpp #include "tools.hpp" #include <iostream> #include <fstream> #include <cmath> #include <cstdlib> void ProgressBar(int it, int num_iterations) { std::cout << "\r" << (double)it * 100 / num_iterations + 1 << "%" << std::flush; } std::string IntToString(int i) { if (i < 0) { i = i*(-1); } int lenght = int(log(i+1)/log(10)+1); char buffer[lenght]; sprintf(buffer, "%d", i); return buffer; } bool BernoulliDistr(double P) { double rnd = drand48(); if (rnd < P) return true; else return false; } int Distance(int x1, int y1, int x2, int y2, int grid_size) { int dx = fabs(x1 - x2); if (dx > grid_size/2) dx = grid_size - dx; int dy = fabs(y1 - y2); if (dy > grid_size/2) dy = grid_size - dy; return dx + dy; } double NormalDistr(double my, double sigma) { double u = drand48(); double v = drand48(); double snormal = cos(2*3.141592654*u)*sqrt(-2*log(v)); return sigma*snormal+my; } double LogNormal(double ev, double var) { double sigma = sqrt(log(var/(ev*ev) + 1)); double my = log(ev) - sigma*sigma / 2; Seite 1

Upload: benjamin-faerber

Post on 14-Jul-2015

88 views

Category:

Science


0 download

TRANSCRIPT

Page 1: Tools.cpp

tools.cpp

#include "tools.hpp"

#include <iostream>

#include <fstream>

#include <cmath>

#include <cstdlib>

void ProgressBar(int it, int num_iterations) { std::cout << "\r" << (double)it * 100 / num_iterations + 1 << "%" <<

std::flush;

}

std::string IntToString(int i) { if (i < 0) { i = i*(-1); } int lenght = int(log(i+1)/log(10)+1);

char buffer[lenght];

sprintf(buffer, "%d", i);

return buffer;

}

bool BernoulliDistr(double P) { double rnd = drand48();

if (rnd < P) return true; else return false;

}

int Distance(int x1, int y1, int x2, int y2, int grid_size) { int dx = fabs(x1 - x2); if (dx > grid_size/2) dx = grid_size - dx;

int dy = fabs(y1 - y2); if (dy > grid_size/2) dy = grid_size - dy;

return dx + dy;

}

double NormalDistr(double my, double sigma) { double u = drand48(); double v = drand48();

double snormal = cos(2*3.141592654*u)*sqrt(-2*log(v));

return sigma*snormal+my;

}

double LogNormal(double ev, double var) { double sigma = sqrt(log(var/(ev*ev) + 1)); double my = log(ev) - sigma*sigma / 2;

Seite 1

Page 2: Tools.cpp

tools.cpp

return exp(NormalDistr(my, sigma));

}

Seite 2