Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Конгруэнтные генераторы псевдослучайных последовательностей - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Трабла с LibCurl http://www.cyberforum.ru/cpp/thread661068.html
#include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <curl/curl.h> #pragma comment (lib,"libcurl_imp.lib");
C++ Параллельное программирование с использованием технологии MPI Помогите пожалуйста написать программу! Распараллелить вычисление суммы двух векторов из N элементов на 3 процесса, не используя функции пересылки сообщений. (На входе программа получает каждым... http://www.cyberforum.ru/cpp/thread660713.html
C++ Поиск файлов на локальном диске
Доброго всем времени суток! Как с помощью WinApi найти список папок на локальных дискахб если FindFirstFile первым аргументом букву диска ("С:\\") не обрабатывает корректно? Например на диске...
C++ Поиск файлов на локальном компьютере
Доброго всем времени суток! Подскажите как на С++ получить список корневых директорий(С: , Е: и тд)?Есть какая-нибудь функция типа как File.listRoots() в Джаве? И не работает рекурсия поиска файла,...
C++ C++ и XML http://www.cyberforum.ru/cpp/thread660008.html
Как с программы на С++ корректно записать данные в XML-файл? а конкретнее - результаты поиска всех файлов локального компа - например вектор структур : struct DFile { unsigned int ind;...
C++ 3-ех мерный квадрат Если ли трехмерные готовые варианты трехмерных квадратов, чтобы его можно было вращать и рассматривать его, но без сторонних библиотек. Может есть готовые варианты или же может дайте ссылки на... подробнее

Показать сообщение отдельно
Olya13254
0 / 0 / 0
Регистрация: 27.10.2010
Сообщений: 29

Конгруэнтные генераторы псевдослучайных последовательностей - C++

01.10.2012, 21:51. Просмотров 1484. Ответов 0
Метки (Все метки)

Ниже приведен генератор псевдослучайных последовательностей, который объединяет два линейных конгруэнтных генератора с периодами 231-85 и 231-249.

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
/* "long" должно быть 32-битовым целым
static long s1 = 1;
static long s2 = 1;
 
/* MODMULT (a, b, c, m, s) рассчитывает s*b mod m при условии, что m = a*b+c и 0<=c<m
#define MODMULT(a, b, c, m, s) q = s/a; s = b*(s-a*q)-c*q; if (s<0) s+=m;
 
/* Возвращает действительное псевдослучайное значение в диапазоне (0,1) */
double CombLCG (void)
{
long q;
long z;
 
MODMULT(53668, 40014, 12211, 2147483563L, s1)
MODMULT(52774, 40692, 3791, 2147483399L, s2)
 
z = s1 - s2;
 
if(z<1)
z += 2147483562;
 
return z*4.656613e-10;
}
 
/* Инициализирует CombLCG, вызывается один раз перед использованием */
void InitLCG(long InitS1, long InitS2)
{
s1 = InitS1;
s2 = InitS2;
}
Этот генератор работает при условии, что компьютер способен представить все целые числа в диапазоне от -231+85 до 231-249. Переменные s1 и s2 глобальные и содержат текущее состояние генератора. Перед вызовом CombLCG() необходимо инициализировать состояние генератора вызовом InitLCG() и передать начальные значения s1 и s2. Для s1 начальное значение берётся из диапазона [1, 2147483562], а для s2- из диапазона [1, 2147483398]. Период генератора близок к 1018.
Необходимо провести серию экспериментов (не менее 5), изменяя длину последовательности и начальные значения s1, s2. Для каждого эксперимента вычислить математическое ожидание и дисперсию. Подскажите, как реализовать, пожалуйста. Заранее благодарю.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru