C - Среднеквадратичный генератор случайных чисел - PullRequest
0 голосов
/ 24 сентября 2018

Итак, я попытался реализовать метод PRNG на Срединной площади, чтобы сгенерировать первые 100 чисел.Работает хорошо до определенного момента, когда в результате получаю отрицательные числа.Я использовал библиотеку времени, чтобы изменить значения в моем массиве temp, чтобы он не застрял в той же последовательности, где число заканчивается двумя нулями.

Мой код:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

time_t now;
struct tm *tm;

unsigned long int prng(int seed)
{
    int num = seed * seed;
    int t[10], inc = 0;
    //Reverse number in an array
    while(num != 0)
    {
        t[inc] = num%10;
        num /= 10;
        inc++;
    }
    int min = inc/4;
    int max = inc / 2 + min;
    int temp[10];

    //Assign the middle square part to another table
    for(int i = min; i <= max; i++)
    {
        temp[i-min] = t[i];
    }

    for(int i=0; i < max-min; i++)
    {
        //Check if there is a "0" "0" sequence, if TRUE - replace with current time (seconds)
        if(temp[i] == 0 && temp[i+1] == 0)
        {
            now = time(0);
            tm = localtime(&now);
            temp[i] = tm->tm_sec/10;
            temp[i + 1] = tm->tm_sec%10;
        }
    }

    //Transform the squared array into an integer
    unsigned long int k = 0;
    for (int i = 0; i <= max-min; i++)
        k = 10 * k + temp[i];


    return k;
}

int main()
{
    unsigned long int n = 123; //seed
    printf("%d ", n);
    for(int i = 0; i<100; i++)
    {
        n = prng(n);
        printf("\n%d ", n);
    }
    return 0;
}

Результаты, которые я получаю:

123
215
226
701
419
6557
24992
7064
7099
85930
-696950
8997
6490
10212
94824
36561
760763
-724206
30238
66334
22325
65048
-94273
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...