source: cpp/frams/util/rndutil.cpp @ 112

Last change on this file since 112 was 112, checked in by sz, 10 years ago

removed weird };

  • Property svn:eol-style set to native
File size: 1.1 KB
RevLine 
[109]1#include "rndutil.h"
2#include <common/nonstd_math.h>
3#include <stdlib.h>
4
5unsigned short pseudornd(short x)
6{
7static long seed=0;
8long y;
9if (x<=0) {seed=-x; return 0;}
10seed=(y=(3677*seed+3680)&0x7fffffff)-1;
11return (unsigned short)(((unsigned short)y)%(x));//rzutowanie y->unsigned short to pewnie blad bo zmniejsza wartosc ktorej sie potem robi modulo, ale pseudornd sluzy chyba tylko do generowania randomowych world map? i modulo i tak jest tam bardzo male, lepiej niczego nie zmieniac bo po co maja pliki z ustawieniami zmienic swoje przypadkowe znaczenie
12}
13
14double CustomRnd(double *tab)
15{
16double *range=tab+1+2*randomN((int)(0.5+tab[0]));
17return range[0]+rnd0N(range[1]-range[0]);
[112]18}
[109]19
20double RandomGener::Uni(double begin, double end)
21{
22return begin+rnd01*(end-begin);
23}
24
25double RandomGener::GaussStd()
26{
27if (isNextGauss) {isNextGauss=0; return nextGauss;}
28double v1,v2,s;
29do {
30v1=2*rnd01-1; //-1..1
31v2=2*rnd01-1; //-1..1
32s=v1*v1+v2*v2;
33} while (s>=1);
34double mult=sqrt(-2*log(s)/s);
35nextGauss=v2*mult;
36isNextGauss=1;
37return v1*mult;
38}
39
40double RandomGener::Gauss(double m,double s)
41{return m+s*GaussStd();}
42
43RandomGener RndGen;
Note: See TracBrowser for help on using the repository browser.