How generate pseudo-random numbers in uniform and gaussian distribution without float/double numbers?

Nexen

I have to write pseudo-random generator on assembler without any float/double operations and functions, like sin/cos, sqrt e.t.c. So I can't use general methods to do that. Also I have limit for random-numbers: 00-0F. How can I do this?

As I understood, I need to generate uniform-number at first. I did it like this: x = (13 * x + 7) % 16; (but it has a problem - it's the unifromest distribution ever. If it generated 15 numbers and I know all of them, I can say 16th with 100% probability, because where is no repetition in period which is 16 (module) ).

And after that, I need to regenerate those numbers to gaussian. I found this solution in the internet, but it doesn't work.

for (i = 0; i < N; ++i) // N - amount of randomized numbers
{
    ++gx[x = (a * x + c) % m]; //gx - histogram of x
    xm[i] = x; // xm - massive of randomized numbers in uniform
    y = 0;      
    for (j = 0; j < i + 1; ++j)
    {
        y += xm[j] * n - j; // n - primitive number. I choose 13
    }
    y = y / (i + 1);
    y %= m;
    ym[i] = y; // ym - massive of randomized numbers in gaussian
    ++gy[y]; //gy - histogram of y
}

What should I do with it? (I know nothing about probability theory)

I get this output of gx and gy:

Uniform
0       4       ****
1       4       ****
2       4       ****
3       4       ****
4       4       ****
5       4       ****
6       4       ****
7       4       ****
8       4       ****
9       4       ****
10      4       ****
11      4       ****
12      4       ****
13      4       ****
14      4       ****
15      4       ****


Normal
0       2       **
1       3       ***
2       8       ********
3       4       ****
4       10      **********
5       4       ****
6       1       *
7       2       **
8       1       *
9       3       ***
10      8       ********
11      4       ****
12      5       *****
13      6       ******
14      1       *
15      2       **
David Eisenstat

Assuming that a "Gaussian" distribution over the integers in [0, 15] means the binomial distribution B(15, 1/2), the obvious approach is to generate two random bytes, mask the second by 0x7f, and count the number of bits set. The three-bit version looks like this.

0 *
1 *******
2 *********************
3 ***********************************
4 ***********************************
5 *********************
6 *******
7 *

If this assumption is incorrect, then please edit your question to specify the exact probability desired for each integer in [0, 15].

If your target platform has an 8-bit multiply with 16-bit output, then it should be possible to get an efficient Complementary-multiply-with-carry generator, for example, b = 256 and r = 256 and a = 207, or b = 256 and r = 32 and a = 211. (I'm not sure how much space you have for the generator state or if these parameter choices pass randomness tests.)

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

Generate random numbers with uniform distribution (getting same number in loop)

From Dev

Generate random numbers with uniform distribution (getting same number in loop)

From Dev

How many random numbers can std::uniform_real_distribution generate before losing randomness?

From Dev

How do I generate a sequence of integer numbers in a uniform distribution?

From Dev

How do I generate a sequence of integer numbers in a uniform distribution?

From Dev

Random real numbers with uniform distribution in verilog

From Dev

Generate random numbers with a given distribution

From Dev

How does matlab generate Gaussian distributed random numbers?

From Dev

How do I generate thread-safe uniform random numbers?

From Dev

How do I generate thread-safe uniform random numbers?

From Dev

How to generate random numbers without repetition in Swift?

From Dev

How to generate random numbers without repetition in Flutter

From Dev

How to generate a matrix of random numbers using the normal distribution in AMPL?

From Dev

How to generate random numbers in specyfic range using pareto distribution in Python

From Dev

How to efficiently generate a set of unique random numbers with a predefined distribution?

From Dev

Generate random numbers without loops

From Dev

Generate random numbers replicating arbitrary distribution

From Dev

How would I produce random numbers between two values with a Gaussian distribution

From Dev

How would I produce random numbers between two values with a Gaussian distribution

From Dev

Is it possible for a uniform discrete distribution (uniform_int_distribution) to generate sequential (or the same) numbers when used correctly?

From Dev

Using Box-Muller Method to Generate Gaussian Random Numbers in Python

From Dev

How to generate random numbers in the buffer?

From Dev

How to generate random numbers in sql?

From Dev

Distribution of Random Numbers

From Dev

Distribution of Random Numbers

From Dev

JavaScript generate random numbers without repeating

From Dev

JavaScript generate random numbers without repeating

From Dev

Generate random numbers without repetition in C

From Dev

Excel VBA to generate a list of 100 pseudo-random numbers

Related Related

  1. 1

    Generate random numbers with uniform distribution (getting same number in loop)

  2. 2

    Generate random numbers with uniform distribution (getting same number in loop)

  3. 3

    How many random numbers can std::uniform_real_distribution generate before losing randomness?

  4. 4

    How do I generate a sequence of integer numbers in a uniform distribution?

  5. 5

    How do I generate a sequence of integer numbers in a uniform distribution?

  6. 6

    Random real numbers with uniform distribution in verilog

  7. 7

    Generate random numbers with a given distribution

  8. 8

    How does matlab generate Gaussian distributed random numbers?

  9. 9

    How do I generate thread-safe uniform random numbers?

  10. 10

    How do I generate thread-safe uniform random numbers?

  11. 11

    How to generate random numbers without repetition in Swift?

  12. 12

    How to generate random numbers without repetition in Flutter

  13. 13

    How to generate a matrix of random numbers using the normal distribution in AMPL?

  14. 14

    How to generate random numbers in specyfic range using pareto distribution in Python

  15. 15

    How to efficiently generate a set of unique random numbers with a predefined distribution?

  16. 16

    Generate random numbers without loops

  17. 17

    Generate random numbers replicating arbitrary distribution

  18. 18

    How would I produce random numbers between two values with a Gaussian distribution

  19. 19

    How would I produce random numbers between two values with a Gaussian distribution

  20. 20

    Is it possible for a uniform discrete distribution (uniform_int_distribution) to generate sequential (or the same) numbers when used correctly?

  21. 21

    Using Box-Muller Method to Generate Gaussian Random Numbers in Python

  22. 22

    How to generate random numbers in the buffer?

  23. 23

    How to generate random numbers in sql?

  24. 24

    Distribution of Random Numbers

  25. 25

    Distribution of Random Numbers

  26. 26

    JavaScript generate random numbers without repeating

  27. 27

    JavaScript generate random numbers without repeating

  28. 28

    Generate random numbers without repetition in C

  29. 29

    Excel VBA to generate a list of 100 pseudo-random numbers

HotTag

Archive