public RandomnessTexture(GraphicsState graphics) { const int size = 2048; var rf = graphics.Device.ResourceFactory; Texture = rf.CreateTexture(new TextureDescription(size, size, 1, 1, 1, PixelFormat.R32_G32_B32_A32_Float, TextureUsage.Sampled, TextureType.Texture2D)); Sampler = rf.CreateSampler(new SamplerDescription(SamplerAddressMode.Wrap, SamplerAddressMode.Wrap, SamplerAddressMode.Wrap, SamplerFilter.MinPoint_MagPoint_MipPoint, null, 0, 0, 0, 0, SamplerBorderColor.TransparentBlack)); ResourceLayout = rf.CreateResourceLayout(new ResourceLayoutDescription( new ResourceLayoutElementDescription(nameof(Texture), ResourceKind.TextureReadOnly, ShaderStages.Compute | ShaderStages.Fragment | ShaderStages.Vertex), new ResourceLayoutElementDescription(nameof(Sampler), ResourceKind.Sampler, ShaderStages.Compute | ShaderStages.Fragment | ShaderStages.Vertex) )); ResourceSet = rf.CreateResourceSet(new ResourceSetDescription(ResourceLayout, Texture, Sampler)); var random = new TRandom(42); var texture = new RgbaFloat[size * size]; for (var i = 0; i < size * size; i++) { var vec = Vector2.Normalize(new Vector2((float)random.Normal(0, 1), (float)random.Normal(0, 1))) * (float)random.NextDouble().Squared().Squared().Squared() * 2; texture[i] = new RgbaFloat( vec.X, vec.Y, (float)random.NextDouble(), (float)random.NextDouble() ); } graphics.Device.UpdateTexture(Texture, texture, 0, 0, 0, size, size, 1, 0, 0); }
public static TimeSpan ExponentialBackoff(int attempt, TimeSpan? firstWait = null) { var firstWaitValue = firstWait ?? 200.Milliseconds(); var waitValue = firstWaitValue.TotalMilliseconds * Math.Pow(2, attempt - 1); var waitWithRandomness = _rand.Normal(waitValue, waitValue * DeviationPercent).Milliseconds(); if (waitWithRandomness < MinWait) waitWithRandomness = MinWait; return waitWithRandomness; }
public void DoDraw() { int gamesPlayed = (int)Math.Round(trng.Normal(gameCntMean, gameCntStDev)); int[] nums = rng.NextUniqueInts(8, 1, 46).ToArray(); int[] winNums = nums.Take(6).ToArray(); int[] supNums = nums.TakeLast(2).ToArray(); Result = new DrawResult(winNums, supNums, gamesPlayed); }
public static uint getDivisionPointBetween(uint init, uint end) { float middle = (float)(init + end) / 2.0f; float lengthBetween = (float)end - init + 1.0f; int divisionPoint; do { // Why 6.0f ? Because we want most streets next to middle point divisionPoint = (int)(random.Normal(middle, lengthBetween / 6.0f) + .5d); } while (!isDivisionPointValidBetween(divisionPoint, init, end)); return((uint)divisionPoint); }
public static void Main() { // 1) Use TRandom to generate a few random numbers - via IGenerator methods. Console.WriteLine("TRandom in action, used as an IGenerator"); var trandom = new TRandom(); Console.WriteLine(trandom.Next() - trandom.Next(5) + trandom.Next(3, 5)); Console.WriteLine(trandom.NextDouble() * trandom.NextDouble(5.5) * trandom.NextDouble(10.1, 21.9)); Console.WriteLine(trandom.NextBoolean()); Console.WriteLine(); // 2) Use TRandom to generate a few random numbers - via extension methods. Console.WriteLine("TRandom in action, used as an IGenerator augmented with extension methods"); Console.WriteLine(string.Join(", ", trandom.Integers().Take(10))); Console.WriteLine(string.Join(", ", trandom.Doubles().Take(10))); Console.WriteLine(string.Join(", ", trandom.Booleans().Take(10))); Console.WriteLine(); // 3) Use TRandom to generate a few distributed numbers. Console.WriteLine("TRandom in action, used as to get distributed numbers"); Console.WriteLine(trandom.Normal(1.0, 0.1)); Console.WriteLine(string.Join(", ", trandom.NormalSamples(1.0, 0.1).Take(20))); Console.WriteLine(trandom.Poisson(5)); Console.WriteLine(string.Join(", ", trandom.PoissonSamples(5).Take(20))); Console.WriteLine(); // 4) There are many generators available - XorShift128 is the default. var alf = new ALFGenerator(TMath.Seed()); var nr3 = new NR3Generator(); var std = new StandardGenerator(127); // 5) You can also use distribution directly, even with custom generators. Console.WriteLine("Showcase of some distributions"); Console.WriteLine("Static sample for Normal: " + NormalDistribution.Sample(alf, 1.0, 0.1)); Console.WriteLine("New instance for Normal: " + new NormalDistribution(1.0, 0.1).NextDouble()); Console.WriteLine(); }