Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

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

397
03 марта 2008 года
SergPas
527 / / 03.02.2007
[SIZE=2]Доброго времени суток, форумчане![/SIZE]
[SIZE=2]В одной из многочисленных книг, прочитал, что генератор псевдослучайных чисел получил такое название из-за генерации [/SIZE][SIZE=2]им чисел по некоторому закону, где каждое последующее число получается из предыдущего. [/SIZE]
[SIZE=2]Была приведена типичная формула n(i)=[n(i-1)*A+B] mod N, где в круглых скобках указывается индекс при числе n. [/SIZE]
[SIZE=2]Также было написано, что при коэффициентах A=1103515245 B=12345 N=32767 данный генератор довольно хорошо работает.[/SIZE]
[SIZE=2]Решил значит я закодить всё это дело... Закодил...[/SIZE]
Код:
[SIZE=2]#include <windows.h>[/SIZE]
[SIZE=2]#include <gl\gl.h>[/SIZE]
[SIZE=2]#include <gl\glut.h>[/SIZE]
[SIZE=2]const int screenWidth=640;[/SIZE]
[SIZE=2]const int screenHeight=480;[/SIZE]
[SIZE=2]int A=1103515245;[/SIZE]
[SIZE=2]int B=12345;[/SIZE]
[SIZE=2]int N=32767;[/SIZE]
[SIZE=2]unsigned long n=50;[/SIZE]
[SIZE=2]int random(int num)[/SIZE]
[SIZE=2]{[/SIZE]
[SIZE=2]return n=((n*A+B)%N)%num;[/SIZE]
[SIZE=2]}[/SIZE]
[SIZE=2]void myInit(void)[/SIZE]
[SIZE=2]{[/SIZE]
[SIZE=2]glClearColor(1.0, 1.0, 1.0, 0.0);[/SIZE]
[SIZE=2]glColor3f(0.0, 0.0, 0.0);[/SIZE]
[SIZE=2]glPointSize(2.5);[/SIZE]
[SIZE=2]glMatrixMode(GL_PROJECTION);[/SIZE]
[SIZE=2]glLoadIdentity();[/SIZE]
[SIZE=2]gluOrtho2D(0.0, (GLdouble)screenWidth, 0.0, (GLdouble)screenHeight);[/SIZE]
[SIZE=2]}[/SIZE]
[SIZE=2]void myDisplay(void)[/SIZE]
[SIZE=2]{[/SIZE]
[SIZE=2]glClear(GL_COLOR_BUFFER_BIT);[/SIZE]
[SIZE=2]glBegin(GL_POINTS);[/SIZE]
[SIZE=2]for (int i=0;i<480;i++)[/SIZE]
[SIZE=2]glVertex2i(random(480), random(480));[/SIZE]
[SIZE=2]glEnd();[/SIZE]
[SIZE=2]glFlush();[/SIZE]
[SIZE=2]}[/SIZE]
[SIZE=2]void main(int argc, char** argv)[/SIZE]
[SIZE=2]{[/SIZE]
[SIZE=2]glutInit(&argc, argv);[/SIZE]
[SIZE=2]glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);[/SIZE]
[SIZE=2]glutInitWindowSize(screenWidth, screenHeight);[/SIZE]
[SIZE=2]glutInitWindowPosition(100, 150);[/SIZE]
[SIZE=2]glutCreateWindow("Aaia?aoi? inaaaineo?aeiuo ?enae");[/SIZE]
[SIZE=2]glutDisplayFunc(myDisplay);[/SIZE]
[SIZE=2]myInit();[/SIZE]
[SIZE=2]glutMainLoop();[/SIZE]
[SIZE=2]}[/SIZE]

[SIZE=2]Результаты такие: выводит чуть больше 3-х десятков точек из 480 при начальном значении n=50, [/SIZE]
[SIZE=2]ну а если изменить n то и ещё меньше. Как считает автор - это хороший результат... Лично меня он не устраивает...[/SIZE]
[SIZE=2]А как считаете Вы?[/SIZE]
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог