Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 24.09.2019
Сообщений: 1
1

Генератор случайных чисел

24.09.2019, 13:08. Показов 906. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день, пишу генератор случайных числе со всеми проверками и возникли вопросы
В качестве генератора использую Линейный конгруэнтный метод Задача стояла в том что бы запустить генератор и сделать проверку на частотный тест, для начала. Но столкнулся с банальным не пониманием как это работает
Вопросов несколько
1)Почему данный метод выдает отрицательные значения если не происходит операций вычитания
2)Я использовал данные константы a, c, m потому что мне сказали что для visual studio эти значения оптимальные но можно ли использовать другие значения и сложно ли подобрать таковые так как при рандомных в этих константах гсч будет совсем негодный
3)У меня при попытки сделать нормировку и переделать границы гсч выдает значения коэффициент нормировки randcof = 0 Почему?
4)Если я неправильно делаю нормировки и мои суждения о том что m это и есть максимально возможное значение генератора неверны то как можно сделать иначе?
5)Какой алгоритм для проверки на частоту выпадения определенных значений самый верный?
Написал большую программу считая что ргенератор работает хорошо и после всех статистических проверок увидел что он выдает плохие значения, после порезал все функции и сократил генератор до минимума, поэтому прошу не ругать за кривость кода, да и не профессионал я в этом деле)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <iostream>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#define P 10 //Количество измерений 
 
//float MAX_RAND = 32767;
float L = -10;
float R = 10;
float H = 123;
unsigned int* x = new unsigned int[P];
unsigned int* z = new unsigned int[P];
double* y = new double[P];
unsigned int pre_rand = 0;
double _rand = 0;
double randcof = 0;
//FILE* rez;
//FILE* crez;
//FILE* srez;
//FILE* xi2rez;
//double ME;
//double DIS;
//double SD;
//double XI2;
 
int RandomGen()
{
    int a = 214013, c = 2531011; //m = 32767;
    unsigned int m = pow(2, 32) - 1;
    //printf("Insert the left edge of numbers value:\n");
    //scanf_s("%f", &L);
    //printf("Insert the right edge of numbers value:\n");
    //scanf_s("%f", &R);
    //printf("Insert the start number:\n");
    //scanf_s("%d", &H);
    x[0] = H;
    //fopen_s(&rez, "rez", "w");
    for (int i = 0; i < P; i++)
    {
        x[i + 1] = (a * x[i] + c) % m;
        pre_rand = x[i + 1];
        z[i] = pre_rand;
        //randcof = pre_rand / m;
        //_rand = randcof * (R - L) + L;
        //y[i] = _rand;
    }
    printf("PRE_RAND:\n");
    for (int i = 0; i < P; i++)
    {
        printf("%d: %d\n", i + 1, z[i]);
        //fprintf(rez, "%f\n", z[i]);
    }
    printf("\n");
    /*printf("RAND:\n");
    for (int i = 0; i < P; i++)
    {
        printf("%d: %p\n", i + 1, y[i]);
        //fprintf(rez, "%f\n", y[i]);
    }*/
    //fprintf(rez, "\n");
    printf("\n");
    //fclose(rez);
    return 0;
}
 
int main()
{
    printf("Random generator\n");
    RandomGen();
    //printf("Frequency test\n");
    //Count();
    //printf("Statistical check\n");
    //Statistic();
    //printf("XI2\n");
    //Xi2();
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.09.2019, 13:08
Ответы с готовыми решениями:

Сделать свой генератор случайных чисел
Всем привет. Не уверен в какую тему это писать, поэтому пишу здесь, по привычке. Необходимо...

Генератор случайных чисел
сделал генератор, он должен по задумке выводить числа от -1000 до 1000, но выводит только почему-то...

Генератор случайных чисел
Подскажите, если не сложно, код программы, которая генерирует целые числа (к примеру, от 1 до 10) и...

Генератор случайных чисел
Уверен, что на форуме эта тема давно обсуждалась (найти не смог, поэтому спрашиваю снова). Как...

1
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
27.09.2019, 09:08 2
Цитата Сообщение от stasz_7 Посмотреть сообщение
1)Почему данный метод выдает отрицательные значения если не происходит операций вычитания
Очевидно, потому что у тебя происходит переполнение, вот здесь - x[i + 1] = (a * x[i] + c) % m. Для таких значений твоих констант нужно использовать 64-битные типы данных, вместо int и unsigned int, например uint64_t.
0
27.09.2019, 09:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.09.2019, 09:08
Помогаю со студенческими работами здесь

Генератор случайных чисел
Друзья у кавота эсть любой генератор случайных чисел кроме стандартного.

Генератор случайных чисел
Я на СBuilder &quot;работаю&quot; не давно, я только учюсь за задания задают ну его ... Помогите студенту,...

генератор случайных чисел в треугольнике
Привет, помогите с задачей! Написать программу вращения треугольника вокруг точки, лежащей внутри...

Генератор случайных чисел и Randomize
Подскажите пожалуйста как задать в генераторе случайных чисел интервал то есть чтобы он генерировал...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru