Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- namespace SymulacjaCyfrowa
- {
- internal class Generator
- {
- private int a = 16807;
- private int q = 127773;
- private int r = 2836;
- /* private int a = 69621;
- private int q = 30845;
- private int r = 23902;*/
- private int max = 2147483647;
- public enum Operator
- {
- NormalOrder,
- PatientAppearance,
- Transfusion,
- EmergencyOrder,
- DonorAppearance,
- PassBlood
- }
- /* public Generator(Operator op)
- {
- switch (op)
- {
- case Operator.NormalOrder:
- Output = 123;
- break;
- case Operator.PatientAppearance:
- Output = 30;
- break;
- case Operator.Transfusion:
- Output = 3;
- break;
- case Operator.EmergencyOrder:
- Output = Convert.ToInt32 (Normal(300,0.1));
- break;
- case Operator.DonorAppearance:
- Output = 40;
- break;
- case Operator.PassBlood:
- Output = UniformAB(5,10);
- break;
- default:
- throw new InvalidOperationException("Nieprawidłowe zapytanie do generatora: " + op);
- }
- }*/
- private double Uniform(ref int seed)
- {
- int h;
- //via ivocom
- h = seed / q;
- seed = a * (seed - q * h) - r * h;
- if (seed < 0) { seed = seed + max; }
- return seed;
- }
- public double UniformZO(ref int seed) { return (Uniform(ref seed) / max); } //rozkład równomierny (0,1)
- public double UniformAB(int A, int B,ref int seed) { return (A +UniformZO(ref seed) * (B - A)); } //rozkład równomierny w przedziale (A,B)
- /* public double Normal()
- {
- return 300;
- }*/
- public double Normal(double s, double w, ref int seed)
- {
- double x = 0;
- for (int i = 0; i < 12; i++)
- {
- x += UniformZO(ref seed);
- }
- x -= 6;
- return x * w + s;
- }
- public double Geometric(double lambda, ref int seed)
- {
- return Math.Floor(-Math.Log(UniformZO(ref seed))/lambda);
- //return (Math.Log(Uniform(ref seed)) / Math.Log(lambda));
- }
- public double Exponential(double lambda, ref int seed)
- {
- return -Math.Log(UniformZO(ref seed)) / lambda;
- }
- //public double Output { get; set; }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement