Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
5
Добавлен:
18.08.2019
Размер:
1.79 Кб
Скачать
#include <stdio.h>
#include <stdlib.h>
/* Минимальный компактный генератор случайных чисел Парка и Миллера */

/* константы Льюиса-Гудмана-Миллера */
#define IA 16807
#define IM 2147483647
#define AM (1./IM)
/* константы Шаржа */
#define IQ 127773
#define IR 2836
/* Специальная маска (см. ниже) */
#define MASK 123456789
long r=0.6;
static long dummy=&r;

/* начальное значение для всех генераторов */
//void Seed(long dum) {dummy=dum;}

/* возвращает случайное число на промежутке от 0 до 1 */
float unirand0(void) {
 long k;
 float ans;
 dummy^=MASK;/* избегаем dummy==0 */
 k=dummy/IQ;
 if((dummy=IA*(dummy-k*IQ)-IR*k)<0) dummy+=IM;
 ans=AM*dummy;
 dummy^=MASK;/* восстанавливаем dummy */
 return(ans);
}


/* Минимальный компактный генератор случайных чисел Бейса-Дурхема */

/* Предыдущие фукнции и константы были описаны выше. */
#define NTAB 32
#define NWUP 8
#define NDIV (1+(IM-1)/NTAB)
#define EPS 1.2e-7
#define RNMX (1.0-EPS)

float unirand1(void) {
 int j;
 long k;
 static long iy=0,iv[NTAB];
 float temp;
 /* инициализация */
 if(dummy<=0 || !iy) {
 /* следим, чтобы значение было положительным */
 if(dummy<0) dummy=-dummy;
 else if(dummy==0) dummy=1;
 for(j=NTAB+NWUP-1;j>=0;j--) {
 k=dummy/IQ;
 if((dummy=IA*(dummy-k*IQ)-IR*k)<0) dummy+=IM;
 if(j<NTAB) iv[j]=dummy;
 }
 /* первый элемент из таблицы */
 iy=iv[0];
 }
 /* генерируем новое число */
 k=dummy/IQ;
 if((dummy=IA*(dummy-k*IQ)-IR*k)<0) dummy+=IM;
 iy=iv[j=iy/NDIV];iv[j]=dummy;
 if((temp=AM*iy)>RNMX) return(RNMX);
 else return(temp);
}



int main()
{
    float x[1000];
    int i;
    for(i=0;i<1000;i++)
    {
       x[i]=unirand1();
       printf("%f\n",x[i]);
    }

//    printf("%d\n",repeatsearcher(x));

    return 0;
}
Соседние файлы в папке miller
  • #
    18.08.20191.79 Кб5main.c
  • #
    18.08.20191.11 Кб5miller.cbp
  • #
    18.08.2019115 б5miller.depend
  • #
    18.08.2019320 б5miller.layout